字符数组就是char数组,当维度是一维时可以当作“字符串”。当维度是二维时可以当作字符串数组,即若干字符串。字符数组的输入除了使用 scanf外,还可以用 getchar或者ges其输出除了使用 printf外,还可以用 putchar或者puts。下面对上述几种方式分别进行介绍:

(1) scanf输入, printf输出

scanf对字符类型有%c和%s两种格式( printf同理,下同),其中%c用来输入单个字符,%s用来输入一个字符串并存在字符数组里。%c格式能够识别空格跟换行并将其输入,而%s通过空格或换行来识别一个字符串的结束。示例如下:

程序代码:

#include<cstdio>
int main(){
char str[10];
scanf("%s",str);
printf("%s",str);
return 0;
}

运行结果:

字符串的输入输出_字符数组

可以看到,%s识别空格作为字符串的结尾,因此后两个TAT不会被读入。另外, scanf在使用%s时,后面对应数组名前面是不需要加&取地址运算符的。

(2) getchar输入, putchar输出

getchar和 putchar分别用来输入和输出单个字符,这点在之前已经说过,这里简单举二维字符数组的例子:

程序代码:

#include<cstdio>
int main(){
char str[5][5];
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
str[i][j] = getchar();
}
}
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
putchar(str[i][j]);
}
putchar('\n');
}
return 0;
}

运行结果:

字符串的输入输出_字符数组_02

(3)gets输入,puts输出

gets用来输入一行字符串(注意:gets识别换行符n作为输入结東,因此 scanf完一个整数后,如果要使用gets,需要先用 getchar接收整数后的换行符),并将其存放于一维数组(或二维数组的一维)中;puts用来输出一行字符串,即将一维数组(或二维数组的一维)在界面上输出,并紧跟一个换行。示例如下:

程序代码:

#include<cstdio>
int main(){
char str1[20];
char str2[5][10];
gets(str1);
for(int i=0;i<3;i++){
gets(str2[i]);
}
puts(str1);
for(int i=0;i<3;i++){
puts(str2[i]);
}
return 0;
}

运行结果:

字符串的输入输出_字符数组_03

 在上例的代码中通过gets(str1)将第一个字符串存入字符数组str1中,然后通过for循环将后三个字符串传入二维数组str[i],之后使用puts将这些字符串原样输出;

 

输入一行字符串还可以使用cin.getline()

特别注意:

  1. 结束符\0的ASCII码为0,即空字符NULL,占用一个字符位,因此开字符数组的时候千万要记得字符数组的长度一定要比实际存储字符串的长度至少多1。注意:int型数组的末尾不需要加\0,只有char型数组需要。还需要注意\0跟空格不是同一个东西,空格的ASCII码是32,切勿混淆。
  2. 如果不是使用 scanf函数的%s格式或gets函数输入字符串(例如使用 getchar),请一定要在输入的每个字符串后加入“\0”,否则 printf和puts输出字符串会因无法识别字符串末尾而输出一大堆乱码。