数组 int float double
char 字符数组
一、字符数组
1、字符数组的一般形式
char 数组名[常量表达式]
char cArray[5];
2、字符数组的引用跟其他类型是一样,用下标。
char cArray[5];
cArray[0]='H';
cArray[1]='e';
cArray[2]='l';
cArray[3]='l';
cArray[4]='o';
3、字符数组的初始化
(1)逐个元素进行初始化,初始化时可以省略下标。
char cArray[5] = { 'H', 'e','l','l','o' };
char cArray[] = { 'H', 'e', 'l', 'l', 'o' };
(2)用字符串对数组赋值,初始化时可以省略下标
char cArray[5] = {"hello"};
char cArray[]={"hello"};
char cArray[]="hello"; (最常用)
注意:1、使用字符串进行初始化,系统会自动在数组里面加上一个'\0',作为字符串结束的标志
char cArray[]="hello"; 等效于char cArray[] = { 'H', 'e', 'l', 'l', 'o','\0' };
printf("%d\n", sizeof(cArray));
printf("%d\n", sizeof(cArray1));
注意:2、用中文的字符串 一个中文的字节数为2.
printf("%d", sizeof("九夏"));// \0
3、在使用字符串初始化,数组大小要比我们需要的元素数量大。
比如说名字的长度就不一样
4、字符数组的输入和输出
(1)用%c逐个输入输出
输入的字符数大于数组大小的数量,只接受前面。
1 #include <stdio.h> 2 3 int main() 4 { 5 char cArray[5]; 6 for (int i = 0; i < 5; i++) 7 { 8 scanf("%c", &cArray[i]); 9 } 10 11 for (int i = 0; i < 10; i++) 12 { 13 printf("%c", cArray[i]); 14 } 15 16 printf("\n"); 17 return 0; 18 }
(2)用%s整体输入输出,输入空格会被截断
1 #include <stdio.h> 2 3 int main() 4 { 5 char cArray[20]; 6 scanf("%s", &cArray); 7 8 printf("%s", cArray); 9 return 0; 10 }
1 #include <stdio.h> 2 3 int main() 4 { 5 //%c 6 7 /*int Row, Col; 8 char cArray[2][5]; 9 10 for (Row = 0; Row < 2; Row++) 11 { 12 for (Col = 0; Col < 5;Col++) 13 { 14 scanf("%c", &cArray[Row][Col]); 15 } 16 } 17 18 for (Row = 0; Row < 2; Row++) 19 { 20 for (Col = 0; Col < 5; Col++) 21 { 22 printf("%c", cArray[Row][Col]); 23 } 24 }*/ 25 26 27 //%s 28 int Row, Col; 29 char cArray[11]; 30 scanf("%s", &cArray); 31 printf("%s", cArray); 32 33 return 0; 34 }
二、字符串函数
首先需要包含字符串的头文件:string.h
1、拷贝
strcpy(目标字符串,源字符串);
把源字符串拷贝到目标字符串。
(1)目标字符串一定是一个变量。
(2)源字符串不一定。
(3)连'\0'一起拷贝,在第一个'\0'处结束
1 代码: 2 //字符串的拷贝 假设有个字符数组 字符串 str1[] str2[] 3 4 //char str1[30] = { 0 }; //0 27个\0 \0 \0 5 //char str2[30] = "hellosadfsadfgoisdfgsdkfg"; //6个字符 6 7 //printf("%d", sizeof(str2)); 8 9 10 //for (int i = 0; i < sizeof(str2); i++) 11 //{ 12 // str1[i] = str2[i]; 13 //} 14 15 //printf("%s\n", str1); 16 17 18 19 //char str1[]="abcdefg"; //下标决定这个变量的内存 // \0结束 20 // 21 22 //strcpy(str1,"fgh"); // \0 23 24 //printf("%c\n", str1[0]); 25 //printf("%c\n", str1[1]); 26 //printf("%c\n", str1[2]); 27 //printf("%c\n", str1[3]); 28 //printf("%c\n", str1[4]); 29 //printf("%c\n", str1[5]); 30 //printf("%c\n", str1[6]); 31 32 33 //printf("%s\n", str1);
2、比较
strcmp(字符串1,字符串2);
(1)字符串1==字符串2 返回0
(2)字符串1>字符串2 返回1
(3)字符串1<字符串2 返回-1
1 //字符串的比较 2 //char str1[100], str2[100]; 3 4 //while (1) 5 //{ 6 // int i = 0, re; 7 // scanf("%s", &str1); 8 // scanf("%s", &str2); 9 10 // while (str1[i]) 11 // { 12 // if (str1[i] != str2[i]) //str1[0]----->str1[99] 13 // break; 14 // else 15 // i++; 16 // } 17 18 // if (str1[i] > str2[i]) 19 // { 20 // printf("str1>str2\n"); 21 // } 22 // else if (str1[i] < str2[i]) 23 // { 24 // printf("str1<str2\n"); 25 // } 26 // else 27 // { 28 // printf("str1=str2\n"); 29 // } 30 //} 31 32 33 34 /*int num = 1; 35 36 char str1[30] = "hello"; 37 char str2[30]; 38 39 printf("要进入系统请输入密码:\n"); 40 while (1) 41 { 42 scanf("%s", &str2); 43 if (strcmp(str1, str2) == 0) 44 { 45 printf("欢迎进入本系统,虽然本系统还在开发中。。。"); 46 } 47 else if (strcmp(str1, str2) != 0) 48 { 49 num++; 50 printf("密码错误,这是第%d次警告\n", num); 51 if (num == 4) 52 { 53 printf("3次错误,请联系中国人民解放军\n"); 54 break; 55 } 56 57 continue; 58 } 59 60 }
3、获取字符串长度
//sizeof(); //字节
//strlen(); //真正的(有效)长度
char a[30] = "hello";
printf("%d\n", sizeof(a));//30
printf("%d\n", strlen(a)); //5