zoukankan      html  css  js  c++  java
  • 【C语言的日常实践(八)】弦

    串数据类型是一个重要的,但C有没有明确的语言字符串数据类型。头文件string.h它包括大多数字符串处理函数。

    故,有操作的串。通常包括string.h头文件。

    1、字符串的长度:对字符串进行的操作中,常常要对它进行求长度的操作。字符串的长度就是它所包括的字符个数。size_t strlen(char const *string);

    注意:strlen返回一个类型为size_t的值,它是一个无符号整数类型。在表达式中使用无符号数可能导致不可预料的结果。

    如以下两条表达式并不相等:

    if(strlen(x) >= strlen(y)) .... /*依照预想的那样工作*/

    if(strlen(x) - strlen(y) >= 0).../*永远为真,strlen的结果是个无符号数,所以操作符>=左边的表达式也将是无符号数*/

    size_t
    strlen(char const *string)
    {
    	int length;
    
    	for(length = 0; *string++ != '';)
    		length++;
    
    	return length;
    }
    2、复制字符串:用于复制字符串的函数时strcpy。原型例如以下:char *strcpy(char *dst, char const *src); 它把參数src字符串拷贝到dst參数。dst參数的曾经内容将被覆盖掉并丢失。即使新的字符串比dst原先的内存更短,因为新字符串以NUL字节结尾,所以老字符串最后剩余的几个字符也会被有效地删除,(事实上并为被删除。能够使用地址訪问)。

    我们必须确保目标字符数组的空间足以容纳须要复制的字符串。假设字符串比数组长,多余的字符仍被复制,它们将覆盖原先存储于数组后面的内存空间的值。在使用该函数前确保目标參数足以容纳源字符串,就能够避免大量的调试工作。

    #include <string.h>
    #include <stdio.h>
    
    int
    main(int argc, char **argv)
    {
    	char 	message[] = "Original message";
    	printf("%c.
    ", message[2]);//结果是Original中的i
    	strcpy(message, "Different");
    	printf("%s.
    ", message);/*结果是Different,后面的message由于NUL的原因未显示*/
    	printf("%c.
    ", message[2]);//结果是Different中的f
    	printf("%c.
    ", message[12]);//结果是message中的s
    	return 0;
    }
    3、连接字符串:把一个字符串加入(连接)到还有一个字符串的后面。

    原型:char *strcat(char *dst, char const *src); 该函数要求dst參数原先已经包括了一个字符串,它找到这个字符串的末尾,并把src字符串的一份拷贝加入到这个位置。

    相同应该确保目标字符数组剩余的空间足以保存整个源字符串。

    #include <string.h>
    #include <stdio.h>
    
    int
    main(int argc, char **argv)
    {
    	char message[100];
    	strcpy(message, "Hello ");
    	strcat(message, "World.
    ");
    	printf("message = %s",message);
    	return 0;
    }
    注意:strcpy和strcat函数都返回它们第1个參数的一份拷贝,就是指向目标字符数组的指针。在实际应用中,它们的返回值常常仅仅是简单的被忽略。


    4、字符串比較:比較两个字符串涉及对两个字符串相应的字符逐个进行比較,直到发现不匹配为止。

    原型:int strcmp(char const *s1, char const *s2);

    假设s1小于s2,返回值小于0;

    假设s1大于s2。返回值大于0;

    假设s1等于s2,返回值等于0。

    5、其它字符串函数

    char *strncpy(char *dst, char const *src, size_t len);向dst写入len个字符。假设strlen(src)的值小于len,dst数组就用额外的NUL字节填充到len长度。假设strlen(src)的值大于或等于len,那么仅仅有len个字符被拷贝到dst中。注意,它的结果将不会以NUL字节结尾。

    char *strncat(char *dst, char const *src, size_t len);

    intstrncmp(char const *s1, char const *s2, size_t len);



    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    转:va_list、va_start、va_arg、va_end的原理与使用
    学习Docker的记录
    Google Code 优秀的开源工具
    转载(程序在内存中运行的奥秘)
    C# 和 Java 之争之我见
    揭秘ASP.NET 2.0的Eval方法(转)
    IIS6.0 架构(二)
    IE6 position:fixed bug (固定窗口方法)(转载)
    用FileStream上传图片转换成二进制,在本地用行,传到服务器上去出现如下错误
    异常处理
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4831387.html
Copyright © 2011-2022 走看看