字符串的表示

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;
}