------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
C语言回顾-字符串
一、字符串的基本概念
字符串是位于双引号中的字符序列。
在内存中以“\0”结束,所占字节比实际多一个。
注意:
1、可以把一个字符常量赋值给一个字符变量,但不能把字符串常量赋值给字符变量。
2、C语言中没有字符串变量,可以用字符数组来存放字符串。
二、字符数组定义
定义和数值型数组相同。
1、一维数组
char 数组名[常量表达式]
例如:char ch[10]
2、二维数组
char 数组名[常量表达式1][常量表达式2]
char arr[3][4]
注意:定义字符数组时,应确保数组长度比字符串长度至少多1,因为要存放”\0” 。
三、字符数组初始化和引用
1、字符数组初始化
1)定义同时进行初始化
char ch[5] = {‘a’,’b’,’c’,’d’,’e’,’f’};
char ch[] = {‘a’,’b’,’c’,’d’,’e’,’f’};
2)先定义,后初始化
char ch[3];
ch[0] = ‘a’;
ch[1] = ‘b’;
ch[2] = ‘c’;
2、引用
和普通数组方法相同
3、字符数组的作用
1)保存字符
2)保存字符串
四、以字符串的形式输入和输出
使用格式字符串为“%s”,表示输入、输出的是一个字符串。
1、字符串的输出
%s 从给定的地址开始,输出字符直到遇到 \0 结束。
2、字符串的输入
如果输入的数组长度是100,那么接收的字符串的长度必须小于100,以留出一个字节用来存放字符串结束符’\0’。
对于一个字符数组,如果不做初始化赋值,则必须说明数组长度。
当用scanf函数输入字符串时,字符串中不能含有空格,否则将以空格作为字符串的结束符。
五、字符串结束符使用
1、字符串结束符
在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。
字符串总以“\0”作为字符串的结束符。
当把一个字符串存入一个数组时,也把结束符’\0’存入数组,并以此作为该字符串是否结束的标志。
有了’\0’标志后,就不必再用字符数组的长度来判断字符串的长度了。
C语言允许用字符串的方式对数组进行初始化赋值。
例如:
char ch[] = {‘a’,’b’,’c’};
注意这种初始化方式后面要手工加上’\0’,否则会出现乱码。
char ch[] = {‘a’,’b’,’c’,’\0’};
2、不使用或者不当使用结束符造成的问题
1)字符数组初始化时没有使用’\0’
会出现乱码,或者输出多余的内容。
2)不当使用结束符
输出的字符串会到’\0’结束,如果不当使用’\0’,会使输出不完整。
六、字符串处理函数
C语言提供了丰富的字符串处理函数,大致分为字符串的输入、输出、合并、修改、比较、转换、复制、搜索几类。
用于输入输出的字符串函数,在使用前要包含头文件“stdio.h”。
使用其他字符串函数则要包含头文件“string.h”。
1、strlen函数
计算字符串长度,不包含’\0’
strlen(数组名)
2、puts函数
字符串输出函数
格式:puts(数组名)
功能:把字符数组中的字符串输出到显示器。
特点:1)可以自动换行。
2)不能格式化输出。
3、gets函数
字符串输入函数
格式:gets(字符数组名)
功能:从标准输入设备键盘上输入一个字符串
gets函数并不以空格作为字符串输入结束的标志,只以回车作为输入结束。
4、strcat函数
字符串连接函数
格式:strcat(字符数组名1,字符数组名2)
功能:把字符数组2中的字符串连接到字符数组1中字符串的后面,并删去字符串1后的字符串结束符’\0’。
返回值:字符数组1的首地址。
注意:字符数组1应定义足够长,否则不能全部装入被连接的字符串。
5、strcpy函数
字符串拷贝函数。
格式:strcpy(字符数组名1,字符数组名2)
功能:把字符数组2中的字符串拷贝到字符数组1中。
注意:
1)字符串结束符’\0’也一同拷贝。
2)字符数组名2也可以是一个字符串常量。
3)字符数组2中的内容会覆盖字符数组1中的内容。
4)字符数组1应足够长,否则不能全部装入所拷贝的字符串。
6、strcmp函数
字符串比较函数
格式:strcmp(字符数组名1,字符数组名2)
也可以比较两个字符串常量,或比较数组和字符串常量。
比较规则:
对两个字符串自左向右逐个字符比较(按ASCII码值的大小比较),知道出现不同的字符或遇到’\0’为止。
如果全部字符相同,则认为相等;
如果出现不相同的字符,则以第一个不相同的字符的比较结果为准。
返回值:
1)字符串1==字符串2,返回0。
2)字符串1>字符串2 ,返回一个正整数。
3)字符串1<字符串2,返回一个负整数。
思考&实现
使用gets函数从键盘输入一个字符串,判断输入的有多少个单词?
/*
思考&实现
使用gets()函数从键盘输入一个字符串,统计单词个数并单词首字母大写
重点:
用word来标识单词。
*/
#include <stdio.h>
int main(int argc, const char * argv[]) {
char ch[100];
int count = 0;
int word = 0;
printf("请输入一个字符串:\n");
gets(ch);
for (int i = 0; ch[i]!='\0'; i++) {
if (ch[i]==' ') {
word=0;
} else if(word == 0) {
count++;
ch[i]=ch[i]-32;
word=1;
}
}
printf("整理后的字符串是:%s\n",ch);
printf("单词个数为:%d\n",count);
return 0;
}
运行结果:
请输入一个字符串:
warning: this program uses gets(), which is unsafe.
i love china
整理后的字符串是:I Love China
单词个数为:3
Program ended with exit code: 0