C语言字符数组
字符数组定义与整型类似只是数据类型从整型变为字符型例char a[10];如果数组要存入字符串与整型不同的是int a[10]能存10个元素但是char a[10]只能存9个元素因为字符串末尾位置需要字符\0作为结束标志所以在存字符串时数组需要有字节数1个位置。字符串的初始化char a[6] {H,e,l,l,o,\0};或char a[] Hello;同样若超出数组储存空间仍然会发生数组越界访问。若是初始化的字符数量不足则会补\0。值得说一下的是对于字符串数组必须在数组末尾留一个字节存放‘\0’虽然对于类似char s[2] Hi这种初始化完全可以但是这只能说是一个字符数组并不能说这是个字符串也就是说字符串在末尾是一定有‘\0’就例如“Hi”该字符串就需要三个字节的空间字符数组的应用及等价函数由于字符数组最后一定是\0所以可以作为循环的结束条件统计字符串中字符数量以下为统计字符数量空格也算字符#include stdio.h int main() { char s[] Hello World; int i 0; int conter 0; while(s[i] ! \0) { conter; i; } printf(一共有%d个字符\n, conter); }更进一步的话可以统计字符串中字母数字其余字符的数目#include stdio.h int main() { char s[] Hello World; int i 0; int counter1 0,counter2 0,counter3 0; while(s[i] ! \0) { if(s[i] A s[i] z) { counter1 1; } else if(s[i] 0 s[i] 9) { counter2 1; } else { counter3; } i; } printf(字母有%d个\n数字有%d个\n其他字符有%d个\n, counter1, counter2, counter3); }数组的复制将数组s1的元素复制到s2中#include stdio.h int main() { char s1[] Hello World!; char s2[100]; int i 0; while(s1[i] ! 0) { s2[i] s1[i]; i; } i 0; while(s2[i]) { putchar(s2[i]); i; } }复制操作可以用函数strcpy(目标源)而打印操作可以用函数puts()于是可以转为以下操作#include stdio.h #include string.h int main() { char s1[] Hello World!; char s2[100]; int i 0; strcpy(s2, s1); puts(s2); }注str开头的函数需要头文件#include string.h数组的拼接以下为将一个数组中的内容接到另一个数组内#include stdio.h int main() { char s1[100] Hello ; char s2[100] World!; int i 0, j 0; while(s1[i] ! 0) { i; } while(s2[j]) { s1[i] s2[j]; i; j; } puts(s1); }对于while()内的内容s[i]!0s[i]!‘\0’s[i]含义相同因为‘\0’的ASCII码正是0拼接操作可以用strcat(被拼接拼接)#includestdio.h #includestring.h int main() { char a[15] Hello; char b[6] World; strcat(a, b); puts(a); return 0; }注strcat会自动寻找\0这也是为什么字符串数组必须多一个位置的原因数组与数组的排序在生活中经常对几组文件进行排序例如对于英文字母是根据字母表的顺序同理数组可根据对应字符的ASCII码进行排序以下为找出最大ASCII码#include stdio.h #include string.h int main() { char s1[] Hello; char s2[] World; char s3[] Hello!; char max[100]; if(strcmp(s1, s2) 0) { strcpy(max, s1); } else { strcpy(max, s2); } if(strcmp(max, s3) 0) { strcpy(max, s3); } puts(max); }strcmp()用于比较对应位置上字符ASCII码的差数组的逆序#include stdio.h #include string.h int main() { char a[] Hello World!; int len strlen(a); for(int i 0; i len / 2; i) { int t a[i]; a[i] a[len - 1 - i]; a[len - i - 1] t; } puts(a); }其中strlen()为a中有效字符的数量除了\0都为有效字符而sizeof()是统计该数组所占字节数#include stdio.h #include string.h int main() { char s[] 1; printf(%d\n, sizeof(s)); printf(%d\n, strlen(s)); }