字符串的表示
char str1[100] = {'A', 'd', 'a','\0'};
char str2[100] = "Ada";
char str3[100];
str3 = "Ada" // 错误!表示一个储存多个字符的数组,且不能用=赋值
strcpy(str3, "Ada"); // 正确
- 上述代码中,第一行定义了一个名叫str1的字符数组,数组中的前4个元素分别是字符
'A', 'd', 'a', '\0'
。\0
是一个转义字符,表示字符串结束。str1表示字符串"Ada"。
- 第二行定义了一个名叫str2的字符数组,效果等同于第一行代码str1的定义,但写法更简洁明了。注意字符串用双引号括起来,不能用单引号。
- 第三行定义了一个名叫str3数组,数组容量是100。请问str3最多能表示多长的字符串呢?没错,答案是99,因为数组需要用一个字符存储字符串结束标记
'\0'
。如果一个字符数组没有存储'\0'
,它只是一个存储多个字符的数组,不是字符串。如何实现对字符数组赋值字符串呢?没错!可借用strcpy函数,如第五行所示。 - 在定义字符数组的时候可以通过
=
用字符串初始化字符数组,例如第一、二行的代码。当定义了字符数组后,就不能用=
对两个字符串赋值了,所以第四行的代码是错误的。
字符串的输入和输出
scanf读入字符串时,会用空格分隔字符串,因此上述代码只能读取空格前的部分"Hello"
。若想读入带空格的字符串,改用gets、gets_s或fgets
char str1[100];
scanf("%s", str1); // 不能读入空格,只能读入空格前的字符串内容。
char str2[100];
gets(str2); // 在vs2012下,使用gets(str2)读入带空格的字符串
gets_s(str2); // 在vs2019下,使用gets_s读入带空格的字符串
fgets(str2, 100, stdin); // 在EduCoder的编译器环境下,用fgets。str2是字符串数组名,100表示最多读入100个字符,stdin表示标准输入,做题时不需要改变stdin参数。
字符串的遍历
1.对整形数组遍历
int a[100]={1,2,3};
int a=3;
for(int i=0;i<3;i++){
//遍历a[i];
}
2.对字符串遍历
char str[100];
gets(str);
for(int i=o;str[i]!='\0';i++){
//遍历str[i];
}
第1关:求字符串的长度
#include <stdio.h>
#include <string.h>
int main()
{
//****补全代码****
char a[100];
int i, len = 0;
fgets(a, 100, stdin);
for (i = 0; a[i] != '\0'; i++)
len++;
printf("%d", len);
return 0;
}