C语言字符串
一: 字符串:
格式: 用“”括起来的字符(其实c语言中得字符串本质就是一个字符数组)
注意:
1)字符的变量是不能够存储字符串 char a='c'; a ="ab";(错) a="中"(错)
2)C中没有字符串类型,字符串是用字符数组来存储
二:字符数组
1)初始化方法
1)先定义,后初始化
char c3[6];
c3[0]='a';
c3[1]=65; //'A' 字符型和整型 可以互相转换
2)定义的同时进行初始化
跟一维数组初始化一样:
char c4[5]={'h','e','l','l','o'}; 不带\0因为这样初始化是按照字符依次存储到分配的内存中
char c5[]={'h','e','l','l','o',' ','w'};
不一样的:
char c6[]={"hello world!"}; 这样初始化带\0,也就是内存多一个字节
char c7[20]={"hello itcast!"};
char c8[]="fasdfasdf";
注意:
字符数组和其他的整形数组一样,当我们一旦给数组部分初始化了
剩下没有初始化的部分也都是0
2)访问方式
1)访问单个字符
printf("%c",c[0]);
2)以字符串的形式输出
char c[5]="asbc";
printf("%s",c); %s遇到\0就会结束
3)存储原理
字符数组在内存中存储的原理
1)计算机分配连续的内存空间
2)字符串的第一个字符存放到地地址中
3)字符数组的每一个字符占用1个字节
char c1[6];
int len = sizeof(c1)/sizeof(char);
= sizeof(c1);
注意:
1>char c5[]={'h','e','l','l','o',' ','w'}; //c5的每一个元素都是char类型,赋了7个值,长度是7
printf("c5:%s\n\n",c5);//打印结果:c5:hello whelloaA,造成这个问题的原因是没有遇到,以%s的格式进行打印,只有遇到\0才结束,因字符数组中存放的没有\0,继续打印
2>char ch[20],ch1[10],ch2[10];
//以%s格式进行输入的时候,输入的时候,不能输入空格
//如果输入了空格,认为此次输入结束,scanf退出
scanf("%s%s%s",ch,ch1,ch2);
三:字符串的长度计算问题
1)统计字符串可见的字符的个数(不含\0)
char c[]="aaaaaa";
int i=0;
while(c[i]!='\0')i++;
printf("%d\n",i);
2)统计字符串占用的字节数(含\0)
char c[]="afasfdasdfasf";
int i=0;
while(c[i++]!='\0');
printf("%d\n",i);
四: //1、puts() 输出的函数,输出内容到输出的缓冲区
// printf("Hello, World!\n");
// //fflush(stdout); //强制刷新缓冲区
// //puts可以帮我们自动换行
// puts("hello world!");
//
// char ch[]="asdfasfasfasf";
// puts(ch);
//puts的缺点是不能格式化输出
//2、gets() 获取用户从键盘上输入的内容
//优点:可以从键盘接收含空格的字符串
//注意:warning: this program uses gets(), which is unsafe.
//gets()是不安全的
// char ch3[10];//当输入的内容超出了数组的长度,gets()会在数组中放10个字符,但是没有'\0'
// char ch1[10];
// //获取内容,从键盘上
// gets(ch1);
// //输出内容
// puts(ch1);
//3、strcat 字符串连接函数
// char oldStr[40]="welcome to ";
// char newStr[10];
// gets(newStr); //接收用户输入的内容
// //把newStr连接到oldStr最后,newStr会覆盖oldStr的'\0'
// strcat(oldStr,newStr); //进行字符串的连接
// puts(oldStr);
//4、strcpy 字符串的拷贝函数
// char oldStr[40]="welcome to ";
// char newStr[10];
// gets(newStr);
// //把newStr的内容拷贝到oldStr中,会覆盖oldStr中的内容
// strcpy(oldStr,newStr);
// puts(oldStr);
//5、strcmp 字符串的比较函数
// char oldStr[10]="abcde";
// char newStr[10];
// //strcmp(oldStr,newStr) 逐个比较字符的ascii码值
// //返回值>0 表示oldStr>newStr
// //返回值<0 表示oldStr<newStr
// //返回值=0 表示oldStr==newStr
//
//
// gets(newStr);
// if (strcmp(oldStr,newStr)>0) {
// puts("你输入的字符串小了");
// }else if(strcmp(oldStr,newStr)<0){
//
// puts("你输入的字符串大了");
// }else{
//
// puts("相等");
//
// }