文档介绍:第13章字符串及字符串操作
在各种编程语言中,字符串的地位都十分重要,C语言中并没有提供“字符串”这个特定类型,而是以特殊字符数组的形式来存储和处理字符串,这种字符数组必须以空字符’\0’结尾,因此,也将这种特定字符数组称为C风格字符串,本章讨论字符串和字符串的一些处理函数。
C风格字符串
C风格字符串是字符数组的一种特例,这个“特”字体现在“以’\0’(空字符,null character)结尾”,如何声明创建一个C风格字符串时,如何使用C风格字符串,这是本节要解决的问题。
C风格字符串的声明
首先想到的方法是声明一个字符数组,而后对其中元素初始化,不过要保证最后一个元素是空字符’\0’,即:
char str[]={‘I’,’’,’L’,’o’,’v’,’e’,’’,’C’,’H’,’I’,’N’,’’A,’\0’};
还记得么?如果在数组声明时没有指定第1维的大小,编译器将根据初始化表达式执行决定数组的大小,对C风格字符串来说,这是种不错的方法,免得一个个字符去数。
上述声明方式看上去很麻烦,要一个字母一个字母地用单引号包裹起来,还要记着最末尾的空字符’\0’,实际上,在C语言中,还提供了另一种声明C风格字符串的方法――使用字符串常量,如:
char str[]=”I Love CHINA”;
C风格字符串内存中的表示
上面声明的str中,C风格字符串共有12个有效字符,但却占据了13个内存空间,编写一段代码来验证这个结论,见示例。
代码‑ C风格字符串占据的内存字节数SizeOfStr
<----------------------------------------------文件名:------------------------------------------------------>
#include <> /*使用printf要包含的头文件*/
#include <>
void main(void) /*主函数*/
{
char sz[]="I Love CHINA"; /*声明一个C风格字符串*/
printf("sz在内存中的大小为:%d",sizeof(sz)); /*输出sz占据的内存字节数*/
getch(); /*等待,按任意键继续*/
}
输出结果为:
sz在内存中的大小为:13
字符数组的输入输出
请注意:本节的标题没有写“C风格字符串的输入输出”,而是说“字符数组的输入输出”,实际上,C语言允许对字符数组进行整体的输入输出和元素访问,并不会检查其末尾是否为空元素,在本节学习中,读者应细心体会字符数组和C风格字符串在输入输出等方面的不同。
字符数组可以进行整体输入输出
普通数组不能进行整体输入输出,必须以元素为单位进行,而字符数组是个例外,来看一个例子,见示例:
代码‑字符串的整体输入输出StrInputOutput
<------------------------------------------文件名:-------------------------------------------------->
#include <> /*使用printf要包含的头文件*/
#include <>
void main(void) /*主函数*/
{
char sz[]="I Love CHINA"; /*声明一个C风格字符串*/
printf("%s\n",sz); /*对字符串进行整体输出*/
printf("请重新输入一个字符串,不多于12个字符\n"); /*提示用户重新输入一个字符串*/
scanf("%s",sz); /*读取新的输入*/
printf("修改后的字符串为:%s\n",sz); /*整体输出新的字符串*/
getch(); /*等待,按任意键继续*/
}
输出结果为:
I Love CHINA
请重新输入一个字符串,不多于12个字符
Hello World (键盘输入)
修改后的字符串为:Hello
使用gets函数读入整行输入
在接收输入时,空格和随后的字符都被舍弃掉了,那有没有一种方法能将空格和随后的字符一块读入呢?有,C语言提供了gets函数,见示例:
代码‑使用gets函数读取一整行到字符数组中FunctionGets
<------------------------------------------文件名:-------------------------------------------------->
#in