【理解】字符数组定义
字符数组的定义: 1)一维字符数组(用来存储字符的数组)定义 char 数组名[数组长度]; char ch[5]; char ch[5+2]; int len = 4; char ch[len]; char ch[M+2]; //M是宏定义字符 2)二维字符数组的定义 char arr[4][10];
【掌握】字符数组初始化和引用
字符数组初始化和引用 1、初始化 1)定义同时进行初始化 char ch[5]={'a','b','c','e','f'}; char ch[]={'a','b','c','e','f'}; char ch1[3]={'a'}; // a \0 \0 char ch2[5]={[3]='b'}; 2)先定义,后初始化 char ch3[3]; ch[0] = 'a'; ch[1] = 'b'; ch[2] = 'c'; 2、引用(遍历) 3、字符数组是用来保存字符串的 字符数组作用: 1)保存字符 2)保存字符串 //用字符数组保存字符串,第一种初始化方法 char str[4]={"abc"}; //str[0] a //str[1] b //str[2] c //str[3] \0 //第二种初始化方法 char str2[4]="abc";
#include <stdio.h> int main(int argc, const char * argv[]) { //定义数组 char ch[5]={'a','b','c','e','f'}; char ch4[]={'a','b','c','e','f'}; char ch1[3]={'a'}; // a \0 \0 char ch2[5]={[3]='b'}; char ch3[3]; ch3[0] = 'a'; ch3[1] = 'b'; ch3[2] = 'c'; //用字符数组保存字符串 char str[4]={"abc"}; //str[0] a //str[1] b //str[2] c //str[3] \0 //字符数组存储字符串的第二种初始化方式 char str2[4]="abc"; //注意,此处数组长度必须是>=4 // char str3[]= "helloworld!"; for (int i=0; i<sizeof(str3); i++) { printf("%c\t",str3[i]); } return 0; }
h e l l o w o r l d !12
【掌握】以字符串的形式输入和输出
#include <stdio.h> int main(int argc, const char * argv[]) { //1、%s输出字符串 //保存字符串 char str[]="asdafasdft"; printf("%ld\n",sizeof(str)); //str[0] i //str[1] t //%c,我们要查看的是一个字符串,每次打印的是一个字符,这个显然不方便 for (int i=0; i<10; i++) { printf("%c",str[i]); } printf("\n"); //用%s输出一个字符串 //从给定的地址开始,一直输出字符,直到遇到\0就停止了 //str[0] ----> i printf("%s\n",str); // printf("%s\n",&str[0]); //&str[3] ----> ast printf("%s\n",&str[3]); //把一个字符数组,用%s进行输出,要加上\0 char ch[10]={'a','b','c','d','\0'}; printf("%s\n",ch); //2、%s接收键盘上输入的一个字符串 char str3[10]; // //从键盘上接收一个字符串,保存在以str为首地址的字符数组中 scanf("%s",str3); printf("--->%s\n",str3); //把字符数组,以%s的格式输出 //注意点: //1、如果以%s格式进行输入的话,注意空格问题 //如果输入的字符串有空格,则空格之后的字符无法被接收保存 //(以%s的格式输入,scanf遇到了空格,就结束了) //2、输入的字符串的长度要小于数组的长度 return 0; }
11 asdafasdft asdafasdft asdafasdft afasdft abdd sfdsf --->SFDSF //这里我也感到莫名其妙,为什么说大写
【掌握】字符串结束符
#include <stdio.h> int main(int argc, const char * argv[]) { //定义了一个字符串 abc char str[]="abc"; //实际上存储了 // str[0] a // str[1] b // str[2] c // str[3] \0 printf("%ld\n",sizeof(str)); // 3 4? //存的是字符,可以以%s输出 char ch[]={'a','\0','c'}; //遇到\0就不动了 char ch1[]={'x','y','z'}; printf("%s\n",ch); printf("%s\n",ch1); //xyz char str2[]="asfasdfa\0sdfasdf"; printf("%s\n",str2); return 0; }
4 a xyza asfasdfa
【掌握】字符串长度计算方法
#include <stdio.h> void test(){ //字符串的长度: //此处 字符串的长度 恰好等于了 数组在内存中占用的字节数 char str[]="abc"; printf("%ld\n",sizeof(str)); //4 char str1[]="abc\0def"; printf("%ld\n",sizeof(str1)); //4 7 8 是8,所以这时候字符串的长度 就不等于了 数组在内存中占用的字节数 //所以有专门的计算字符串长度的方法 //1)使用字符串函数 // printf("strlen--->>%d\n",strlen(str1)) ; 后面讲 //2)以'\0' 作为条件,进行判断 遇到\0 就结束 // \0之前的就是字符串的长度 //不知道数组的长度的情况下,计算字符串的长度 char str2[100]="asd"; //包含\0 4 不包含\0 3 printf("%d\n",sizeof(str2)); int i=1; // while (str2[i-1]!='\0')i++; printf("%d\n",i); } /** * 查找字符在字符串中首次出现的位置 * * @param str <#str description#> * @param key <#key description#> * * @return <#return value description#> */ int searchChar(char str[],char key){ //通过循环依次取得字符串的每一个字符, //循环结束条件 str[i]!='\0' for (int i=0; str[i]!='\0'; i++) { if (str[i]==key) { return i; } } // 如果没有结束,开始比较 key str[i] return -1; } int main(int argc, const char * argv[]) { test(); char str1[]="asdfasxyasdfasdkdasf"; int loc = searchChar(str1,'d'); printf("角标是%d\n",loc); return 0; }
4 8 100 4 角标是2
【理解】字符串处理函数
字符串函数的使用 使用puts和gets 必须包含头文件 stdio.h puts() 输出一个字符串 原来输出字符串的方法 char str[]="abc"; printf("%s\n",str); puts(字符数组名); gets() 输入一个字符串 原来接收一个字符串 char str1[100]; scanf("%s",str1); //缺陷,输入字符串的时候不能有空格 gets(数组名); 需要包含 string.h的头文件 strcat() 连接一个字符串,把两个字符串连接成一个字符串 A B两个字符串 strcat(A,B) 把字符串B连接到A的后面去
1 #include <stdio.h> 2 #include <string.h> 3 4 int main(int argc, const char * argv[]) { 5 6 char str[]="abc"; 7 // printf("%s\n",str); 8 9 //puts(字符数组地址); 10 //1)puts函数可以自动换行吗? 可以 11 //2)也可以不是数组的首地址,可以是元素的地址 12 //3)必须是字符数组 13 //4) 不可以格式化输出 14 puts(str); 15 puts(&str[1]); 16 17 18 char str1[10]; 19 //使用gets会给出一个警告 20 //1)warning: this program uses gets(), which is unsafe. 21 //2)不安全:数组长度是100,但是如果你输入了120个字符,存在越界问题 22 //3)使用gets可以接收空格 23 gets(str1); //这种写法是不安全的 24 puts(str1); 25 26 //字符串的函数 27 //strcat 函数介绍,使用该函数必须要引入头文件 28 //1)格式:strcat(oldStr,newStr); 29 //2) oldStr的长度要足够到,只要能够保存下oldStr+newStr 30 //3) newStr 把oldStr的最后一个字符\0给覆盖了 31 char str2[100]="w"; 32 char str3[]="itcast!"; 33 34 strcat(str2, str3); 35 puts(str2); //输出的是新字符串 36 puts(str3); 37 38 39 40 printf("%p\n",&str2[1]); 41 printf("%p\n",str3); 42 43 return 0; 44 }
abc
bc
warning: this program uses gets(), which is unsafe.
sdfdfafdfdgafdgv aefdgvagdf
sdfdfafdfdgafdgv aefdgvagdf
witcast!
itcast!
0x7fff5fbff6d1
0x7fff5fbff6c8
(lldb)
strcpy 字符串拷贝函数 strcpy(oldStr,newStr); 把newStr拷贝到oldStr中,newStr会覆盖掉oldStr中的内容 strcmp 字符串的比较函数 strcmp(str1,str2); //比较两个字符串的大小 //abc //def 大 规则:比较字符的ascii码值 比较在字典中出现的顺序 //abc 大 //aac //比较的过程:逐个取两个字符串的字符对应位相比较,从第一位不相同的位开始,就能确定字符串大小 strcmp(str1,str2) 函数有返回值 > 0 str1>str2 < 0 str1<str2 ==0 str1 == str2 strlen 字符串的长度计算函数
1 #include <stdio.h> 2 #include <string.h> 3 4 int main(int argc, const char * argv[]) { 5 6 char str1[100]="aaaaaa"; 7 char str2[]="bangzhang"; 8 puts(str1); 9 //字符串的拷贝 10 //str1要足够大,否则可能会越界 11 strcpy(str1, str2); 12 //str2 拷贝到str1中 str2压在了str1上 13 puts(str1); 14 puts(str2); 15 16 //strcmp 比较两个字符串的大小 17 int s = strcmp(str1, str2); 18 19 printf("s=%d\n",s); 20 21 //strlen计算字符串的长度 22 //strlen不含\0 23 int s1= strlen(str1); 24 printf("s = %d\n",s1); 25 return 0; 26 }
aaaaaa bangzhang bangzhang s=0 s = 9
应用:单词首字母大写&统计单词个数
1 #include <stdio.h> 2 3 int main(int argc, const char * argv[]) { 4 5 //定义变量 6 char str[100]; 7 int isWord = 0; 8 int count = 0; //统计单词的个数 9 //提示用户输入字符串 10 printf("请输入一个字符串:\n"); 11 //接收字符串,并保存到数组中 12 gets(str); 13 //循环取出每一个字符 遇到\0 循环结束 14 for (int i=0; str[i]!='\0'; i++) { 15 16 //判断 17 if (str[i]==' ') { 18 //把是否是单词标记改一下 19 isWord = 0; //这是一个标记,words=0表示是一个单词 20 }else if(isWord == 0){ 21 // 当前循环 字符是空格 下次循环一定是一个单词 22 count++; 23 str[i] = str[i]-32; //减去32就大些了 24 isWord = 1; // 让单词标志变为不是单词 25 } 26 27 } 28 printf("单词个数:%d,字符串:%s\n",count,str); 29 //puts(str); 30 31 return 0; 32 }
请输入一个字符串: warning: this program uses gets(), which is unsafe. dfasdfasgf fgdsaf dasfgasg sad 单词个数:4,字符串:Dfasdfasgf Fgdsaf Dasfgasg Sad