黑马程序员---学习笔记6:字符串

七分热度_HD 2015-08-11 12:29:19
字符串:
位于双引号中的字符序列。在内存中以“\0”结束,所占字节比实际多一个。(\0是空字符,就是ascii码为0的那个)
注意:我们可以把字符常量赋值给字符变量,但是不能把字符串常量赋值给字符变量。
C语言中没有字符串类型的变量,可以用字符数组来存放字符串。

字符数组的定义:
1)一维字符数组定义;
char 数组名[常量表达式];
2)二维字符数组定义:
char 数组名[常量表达式][常量表达式]

字符数组初始化以及引用方式:
1,初始化
1)定义同时初始化:
char ch[5]={'a','b','c','d','e'};
char ch[ ]={'a','b','c','d','e'};
char ch[5]={'a','b','c'};部分初始化,其余部分,系统自动初始化为‘\0’
char ch[5]={[3]='d'};选择初始化,指定初始化的元素
2)先定义,后初始化
char ch[3];
ch[0]='a';
ch[1]='b';
ch[2]='c';
2,引用:
下标法进行引用和遍历
3,字符数组用来保存字符串
字符数组的作用:
1)保存字符
2)保存字符串
第一种方式:
char ch[4]={"abc"};双引号括起字符串可以直接赋值,要为最后的结束符(\0)保留存储空间
第二种方式:
char ch[4]="abc"; 这种方式没有大括号,结果一样。
第三种:char ch[ ]=“helloworld!”;自动分配内存,包括结束符

字符串的输入和输出:
使用的格式字符串为“%s”,表示输入和输出一个字符串

printf("%s",ch[3]);
从给定的地址开始,一直输出字符,直到遇到\0就停止了

%S接收键盘上输入的一个字符串
char str[50];
从键盘上接收一个字符串,保存在str为首地址的数组中
scanf("%s",str);
注意:如果以%S进行输入的话,遇到空格就会停止输入,空格之后的字符就无法被接收
输入的字符串的长度要小于数组的长度。

字符串结束符的使用:
用%S打印字符串,会遇到问题,那就是在遇到\0之前一直打印,根本停不下来。(把内存中的数据都打印出来)

char str[]="abc\0abc";
printf("%d\n",sizeof(str));//打印的结果是8

有专门计算字符串长度的方法
1)使用字符串函数:strlen(str);结果是7,这个函数不会计算结尾的\0

int searchChar(char str[ ],char key)
{
for(int i=0;str[i]!='\0';i++)
{
if(str[i]==key)
{
return i;
}
}
return -1
}

注意:在定义数组的数据类型时,定义的是数组所包含的元素的的数据类型,而不是数组名的类型,数组名永远是一个指针,指向第一个元素的地址,即数组的首地址。

字符串函数的使用:
puts() 输出一个字符串
puts(字符数组名)
puts函数可以自动换行,默认在打印的字符串后面换行
参数可以不是数组首地址可以是元素地址
puts不可以格式化输出,就是puts(--->%s);这是不可以的,只能puts(%s);


gets()输入一个字符串
gets(字符数组名)
使用gets会给出一个警告,这是指,如果数组是100,但是你输入120个字符,它是不会报错的,但是它有一个优势,就是可以接收空格,scanf不可以的



strcat()连接两个字符串,使用该函数引入string.h
strcat(A,B);把字符串B连接到字符串A后面
注意:字符串A的长度要足够的大,要能容下A+B的长度,字符数组B把A的最后一个字符\0给覆盖了

strcpy 字符串拷贝函数
strcpy(oldStr,newStr);把newStr拷贝到oldStr中,覆盖oldStr的内容,一定要保证oldStr的内存足够大

strcmp 比较两个字符串的大小
规则:比较Ascii码值 比较在字典中出现的顺序
比较过程:逐个取两个字符串的字符,进行比较,从第一个不相同的开始就能确定字符串大小了
返回值:
>0 前一个大于后一个(真正的值时,两个字符相差的数值)
<0 前一个小于后一个
=0相同

strlen(字符数组名) :
个数 不包含\0的
...全文
354 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

1,160

社区成员

发帖
与我相关
我的任务
社区描述
在CSDN学院遇到的问题反馈及对学院的改进建议等。
社区管理员
  • 软件培训社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧