首先,C语言中是没有专门的字符串类型的变量的,一般存储字符串都是使用字符char类型的数组。这一点有别于C++。
字符串类型与一般的字符序列相比,最大的区别在于最后多了一个'\0'字符,它也被称作字符串结束符。注意,字符'\0'对应的ASCII码的值也是0。
1. 字符串与字符数组的区别
例1:
char s1[5]={'h','e','l','l','o'}; 是字符数组
char s2[6]={'h','e','l','l','o','\0'}; 或者 char s2[]="hello"; 是字符串(后一种系统自动加字符串结束符)
总结:有'\0'的才是字符串。
2. 输入输出
对于上述例子中的s1,只能用%c循环打印每个字符;对于s2,可以用%c循环打印,也可以用%s直接整体输出。
使用printf()和%s整体输出字符串的规则:遇到'\0'就停止。使用scanf()和%s整体输入字符串时,不能有空白字符,例如空格等。
例2:
char s2[]="he\0llo"; printf("%s",s2); 打印结果为he
scanf("%s",s2); 输入" he llo",则s2为"he"
关于puts()和gets()
puts(str)会打印字符串str然后把'\0'转换成'\n',相当于printf("%s\n",str)。也是遇到'\0'就停止。
gets(str)则不同于scanf,遇到空白字符不会停止,直到遇到回车字符才会停止读入。
注意:如果要使用gets()和puts(),需要加入头文件
3. 其它常用字符串处理函数
注意:以下函数都需要包括
strlen(str) :返回str中有效字符个数,不包括'\0'
strcpy(str1,str2) :将str2复制给str1
strcpyn(str1,str2,n) :将str2的前n个字符复制给str1
strcat(str1,str2) :将str2连接到str1后面
strcmp(str1,str2) :按ASCII码比较,相等返回0,str1小返回负值,str1大返回正值
strlwr(str) :大写字母转换成小写字母
strlwr(str) :小写字母转换成大写字母