字符数组
数组中的每个元素都是一个字符的数组称为“字符数组”。有时,把一维字符数组又称为“字符串”。定义字符数组的方法与定义其他类型数组的方法类似。
对于字符数组的定义“char s[10] = {'H','e','l','l','o'};”其在计算机内部的存储方式如下:

也就是说,字符串的末尾都会有一个空字符'\0'。
字符数组赋值方法
用字符常量逐个初始化:char letter[5]={'a','e','i','o','u'};
用赋值语句逐个元素赋值:letter[0]='a';…
用 scanf 读入整个数组:scanf ("%s",letter);
用 scanf 逐个元素读入:scanf ("%c",&letter[0]);…
用 cin 输入整个数组:cin >> letter;
用 cin 逐个元素输入:cin >> letter[0];…
用 gets 读入整个数组:gets(letter);
用 getchar 逐个读入:letter[0]=getchar();…
字符数组输出方法
用 cout 输出整个数组:cout >> letter;
用 cout 逐个元素输出:cout >> letter[0];…
用 printf 输出整个数组:printf ("%s",letter);
用 printf 逐个元素输出:printf ("%c",letter[0]);…
用 puts 输出整个数组:puts(letter);
用 putchar 逐个元素输出:putchar(letter[0]);…
例1、阅读以下程序,体会各种字符串输入输出方式的区别。
#include <bits/stdc++.h>
using namespace std;
int main()
{ char s1[20],s2[20];
scanf( " %s " ,s1);
scanf( " %s " ,s2);
printf( " %s " ,s1);
printf( " %s\n " ,s2);
return 0;
}
【问题分析】
scanf 函数读取一个字符串时,是把
回车符、空格符、Tab 符作为字符串的结束符号
。所以,输入“Hello world!”,第一个 scanf 语句只会读取“Hello”,而第二个 scanf 语句会接着读入“world!”。另外cin也是把
回车符、空格符、Tab 符作为字符串的结束符号
。
输出为:
Hello
world!
如果程序改为用 gets 输入、puts 输出:
#include <bits/stdc++.h>
using namespace std;
int main()
{ char s1[20],s2[20];
gets(s1);
gets(s2);
puts(s1);
puts(s2);
return 0;
}
输入:
Hello world!
Test2
则输出为:
Hello world!
Test2
注意:gets()接受空格,不接受回车。所以Hello World!可以整体输入给s1。
如果程序改为用 getchar 输入、putchar 输出:
#include <bits/stdc++.h>
using namespace std;
int main()
{ char s1[20],s2[20],i;
i = 0;
while((s1[i] = getchar()