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码的差值

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值