字符数组与字符串与字符串数组
字符数组:一个数组元素为字符。
char world[] = {'H','e','l','l','o','!'};
数组序号 | 数组元素 |
---|---|
world[0] | H |
world[1] | e |
world[2] | l |
world[3] | l |
world[4] | o |
world[5] | ! |
字符串:它仍然是一个字符数组,所以字符串就是数组,可用数组运算;但是因为有**‘\0’**,它变成了可以运用字符串运算的字符串。
char world[] = {'H','e','l','l','o','!','\0'};
数组序号 | 数组元素 |
---|---|
world[0] | H |
world[1] | e |
world[2] | l |
world[3] | l |
world[4] | o |
world[5] | ! |
world[6] | \0(一个字节)/0(四个字节) |
//注1:以下都是字符串,虽然没有'\0',都是计算机会自动补入一个'\0',故这个数组有6个元素。若要构造一个字符串便用数组,若要处理一个字符串用指针。
char (const) *str = "Hello";//定义为这样的字符串不可改变
char world[] = "Hello";
char line[10] = "Hello";
//注2.当两个字符串中间没有别的符号,则计算机会自动将两个连在一起,如下的相当于"I love you"
scanf("I"
"love you");
字符串数组:char a [可不填] [必填(10)] / char *a[必填(10)]
字符串的输入输出
char world;
scanf("%7s",word);//在'%'与's'之间的数字表示最多允许读入字符的数量,这个数字应该比数组的大小小
printf("%s##\n",world);//##用于区分字符串边界
//注:scanf不读空格和tab和回车
//putchar/getchar:一次只输入输出一个字符,不读回车
int a;
a = getchar();//原型为int getchar(void),返回类型为int是未来返回EOF(-1);windows --> ctrl-z,unix --> ctrl-d:输入结束,此时会返回EOF,但是如果打ctrl-c,意思为终止程序
putchar(a);//原型为int putchar(int c):返回写了几个字符,EOF(-1)表示写失败
字符串函数(包含在include<string.h>头文件内)
strlen(字符串):告诉你字符串有多长
不读回车(sizeof():占据了几个字节,用%lu输出,会读回车)
strcmp(字符串1,字符串2):比较两个字符串大小
从第一位开始比较,若相等便往下继续比较,直至有不相等或字符串结束;相等则返回0,不相等会给出不相等那一位字符串2减掉字符串1的差值。
strcpy(空字符串,被复制的字符串):复制已有字符串,一变二
后面的字符串复制一个到前面的新字符串中,结尾的’\0’也会被复制过去
strchr(字符串,字符):从左到右找字符第一次出现的地方
strrchr(字符串,字符):从右到左找字符第一次出现的地方
以上两个函数返回NULL为没有找到