#C03L06P04. C03.L06.字符类型定义、读入、输出、应用.例题2.字符数组和常用函数
C03.L06.字符类型定义、读入、输出、应用.例题2.字符数组和常用函数
阅读以下程序,体会各种字符串输入输出方式的区别。
#include <bits/stdc++.h>
using namespace std;
char s1[20],s2[20];
int main(){
scanf( "%s" ,s1);
scanf( "%s" ,s2);
printf( "%s\n" ,s1);
printf( "%s\n" ,s2);
return 0;
}
输入:
Hello World!
输出:
{{ input(1) }}
{{ input(2) }}
问题分析
scanf 函数读取一个字符串时,是把回车符、空格符、Tab 符作为字符串的结束符号。所以,输入“Hello world!”,第一个 scanf 语句只会读取“Hello”,而第二个 scanf 语句会接着读入“world!”。
#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
输出:
{{ input(3) }}
{{ input(4) }}
#include <bits/stdc++.h>
using namespace std;
int main(){
char s1[20],s2[20],i;
i = 0;
while((s1[i] = getchar()) != '\n' )
i++;
s1[i] = '\0' ;
i = 0;
while(s1[i] != '\0' )
{
putchar(s1[i]);
i++;
}
putchar( '\n' );
i = 0;
while((s2[i] = getchar()) != '\n' )
i++;
s2[i] = '\0' ;
i = 0;
while(s2[i] != '\0' )
{
putchar(s2[i]);
i++;
}
putchar( '\n' );
return 0;
}
输入:
Hello World
Test2
输出:
{{ input(5) }}
{{ input(6) }}
通过对比分析和测试,有关字符数组的输入方式总结如下:
-
gets函数用来输入一行字符数组,仅以回车结束输入(可以包含空格),没有限制读入的长度,如果太长,可能导致堆栈溢出;
-
scanf函数(包括cin)用来读取字符数组时,中间出现空格读入结束(以空格符、回车符、Tab符结束一次输入),但是scanf函数要比cin效率高很多;
-
getchar每次读入一个字符,读入效率最高。
快速读入数字字符串函数(提前预告,学了函数调用之后,就很容易理解了)
相关
在以下作业中: