C语言字符串
字符串
字符串字面量
‘\0’是字符串结束的标志
”a“是字符串字面量,‘a’是字符常量
字符串的储存
printf(“123”
“123”)可以连起来
或者(”123\
123“)(缩进不可以随便)
‘\0’空字符
字符数组的定义
char str[80+1]
字符数组的初始化
用字符常量的初始化列表对数组初始化
char str[3]={'c','h','\0'};
用字符串常量直接对数组初始化
char str[6]={"china"};
char str[6]="china";
char str[]="china";(长度可以忽略不写)
char str[10]=“China”编译器自动补充\0(多余自动补0)
二维字符串
第一个方括号可省略,表示个数
第二个方括号不可以省略,表示长度
字符指针
char *pstr="hello china";
注意:
char *pstr;
pstr="hello china";
pstr是一个指向常量存储区的字符串指针变量,可以修改变量的值(指向)但是不可以修改它指向的存储单元
字符串字面量本身就代表一个地址!(它是只读的)是不可以通过修改指针的方式来修改数值的
只有让指针指向一个字符串的时候才可以修改!
字符串的访问和输入输出
访问字符串中的单个字符
1.通过数组的方式访问
2.通过指针++的方式访问
注意:对于数组名str,不可以采用str++的方式来使其指向字符串中的某个字符,因为数组名是一个地址常量,其值不可改变
字符串的输入和输出
第一种方式
利用传统的for循环+数组名的形式输出,注意的是输入和输出的格式均为%c
第二种方式
由于字符串的长度和字符数组的大小通常不是一致的,所以很少采取第一种方式来输出字符数组中的字符串,更常用的方式是借助字符串结束标志'\0'识别字符串的结束,进而结束字符串的输出操作
for(i=0;str[i]!='\0';i++) { printf("%c",str[i]); }
这种方法的好处就是不用管字符串中的字符数是已知还是未知的
第三种方式
按照%s格式,将字符串作为一个整体输出入
printf("%s",str); scanf("%s",str);
这种方法的局限性在于输入的时候不能输入带空格的字符串,会空格后面的字符会读入到缓冲区内。
第四种方法(最优解)
利用字符串处理函数gets(),可以输入带空格的字符串,因为空格和制表符都是字符串的一部分。
此外,gets()和scanf()对回车符的处理也不一样,get()以回车符作为字符串的中支付,同时将回车符从输入缓冲区中读走,但是不作为字符串的一部分,而sancf不读走回车符,回车符仍留在缓冲区内。
gets(name); printf("hello%s!\n",name);
此外还可以用puts()来输出字符串
但是:gets不能限制输入字符串的长度,很容易引起缓冲区益处,scanf也是同样的问题,即使使用了带格式控制的形式也不能真正解决,所以可以修改为
fgets(name,sizeof(name),stdin);
其含义为从标准输入stdin中读取一串长度为sizeof(name)的字符串送到name为首地址的存储区中,其输入的多余的字符就被舍弃了。函数fgets()是函数gets的文件操作板。
在字符串中包含双引号
需要用到转义字符,即在这个双引号的前面加上一个反斜杠( \ ),也就是比原来多一个\字符
字符常量和字符变量
字符变量是char 类型定义的变量
字符常量是ASCII字符集中对应的一个字符
字符串变量和字符串常量
字符串常量是双引号“”中的字符序列或者转义字符,是不可以改变的
字符串变量是储存在char数组中的变量
字符串处理函数
包含源文件<string.h>
strlen(字符串) string length计算字符串的长度(实际长度不包含'\0')
手动实现原理:累加一直到等于'\0'
strcpy(目标字符数组,源字符串) string copy将一个字符串复制到另一个里面,相当于赋值
手动实现原理:元素逐个改变
升级版本strncpy(str2,str1,n)表示只复制n个元素更加安全;其返回值为指向str2的指针,利用返回值可以实现连续赋值
strcat(目标字符数组,源字符串)string combination两个数组加起来
手动原理:计算长度然后逐个改变
升级版本:strncat(str2,str1,n)表示添加n个,返回值同样是指向str2的指针,同样可以实现几个字符串的连续连接
strcmp(字符串1.字符串2)string combination比较两个字符串,返回值0 >0 <0三种
原理是逐个字符比较,返回第一个不相等字符的ASCII码的差值
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!