C语言__字符串
C语言中的字符串简介
在C语言中,我们可以用字符数组来存储字符串。
字符串可以看做是一个特殊的字符数组,为了跟普通的字符数组区分开来,应该在字符串的尾部添加了一个结束标志'\0'。'\0'是一个ASCII码值为0的字符,是一个空操作符,表示什么也不干。所以采用字符数组存放字符串,赋值时应包含结束标志'\0'。
尾部有个'\0',如果没有这个结束标记,说明这个字符数组存储的并不是字符串
字符串的初始化:
1 char a[3] = {'m', 'j', '\0'};
2
3 char b[3];
4 b[0] = 'm';
5 b[1] = 'j';
6 b[2] = '\0';
7
8 char c[3] = "mj";//当我们使用类似第8行的初始化方式时,系统会自动在字符串尾部加上一个\0结束符
9
10 char d[] = "mj";
11
12 char e[20] = "mj";
字符串的输出
stdio.h中两个函数来输出字符串,分别是printf和puts函数
char a[3] = {'m', 'j', '\0'};
printf("%s", a);
//%s表示期望输出一个字符串,因此printf函数会从b的首地址开始按顺序输出字符
//一直到\0字符为止,因为\0是字符串的结束标记。
puts(a); //puts函数输出一个字符串后会自动换行
字符串的输入:
stdio.h中有2个函数可以用来接收用户输入的字符串,分别是scanf和gets
char a[10];
scanf("%s", a);//scanf函数会从a的首地址开始存放用户输入字符,存放完毕后,系统会自动在尾部加上一个结束标记\0
gets(a);
//gets跟scanf一样,会从a的首地址开始存放用户输入的字符,存放完毕后,系统会自动在尾部加上一个结束标记\0。
//gets一次只能读取一个字符串,scanf则可以同时读取多个字符串
//gets可以读入包含空格、tab的字符串,直到遇到回车为止;scanf不能用来读取空格、tab
字符串数组:
char names[2][10] = { {'J','a','y','\0'}, {'J','i','m','\0'} };
char names2[2][10] = { {"Jay"}, {"Jim"} };
char names3[2][10] = { "Jay", "Jim" };
//字符串数组看作是一维数组,它的元素是字符串。字符串数组names由字符串"Jay"和字符串"Jim"构成。
putchar函数
stdio.h头文件中声明的。
putchar(65); // A
putchar('A'); // A
int a = 65;
putchar(a); // A
//putchar函数智能输出一个字符
getchar函数
stdio.h头文件中声明的。
char c;
c = getchar();
getchar函数可以读入空格、TAB,直到遇到回车为止。scanf则不能读入空格和TAB。
getchar一次只能读入一个字符。scanf则可以同时接收多个字符。
getchar还能读入回车换行符,这时候你要敲2次回车键。第1次敲的回车换行符被getchar读入,第2次敲的回车键代表输入结束。
字符串处理函数
在string.h头文件中声明的,使用前要包含这个头文件。
strlen函数
int size = strlen("mj"); // 长度为2
char s1[] = "lmj";
int size1 = strlen(s1); // 长度为3
char s2[] = {'m', 'j', '\0', 'l', 'm', 'j', '\0'};
int size2 = strlen(s2); // 长度为2
//这个函数可以用来测量字符串的字符个数,不包括\0
strcpy函数
char s[10];
strcpy(s, "lmj");
//strcpy函数会将右边的"lmj"字符串拷贝到字符数组s中。
//从s的首地址开始,逐个字符拷贝,直到拷贝到\0为止。当然,在s的尾部肯定会保留一个\0。
strcat函数
char s1[30] = {'L', 'm', 'j', '\0', 'L', 'o', 'v', 'e', '\0'};
strcat(s1, "OC");
printf("%s", s1);
//strcat函数会将右边的"OC"字符串拼接到s1的尾部,最后s1的内容就变成了"LOVEOC"
strcmp函数
char s1[] = "abc";
char s2[] = "abc";
char s3[] = "aBc";
char s4[] = "ccb";
printf("%d, %d, %d", strcmp(s1, s2), strcmp(s1, s3), strcmp(s1, s4));
//这个函数可以用来比较2个字符串的大小
//两个字符串从左至右逐个字符比较(按照字符的ASCII码值的大小),直到字符不相同或者遇见'\0'为止。
//如果全部字符都相同,则返回值为0。如果不相同,则返回两个字符串中第一个不相同的字符ASCII码值的差。
//即字符串1大于字符串2时函数返回值为正,否则为负。