#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) }}

通过对比分析和测试,有关字符数组的输入方式总结如下:

  1. gets函数用来输入一行字符数组,仅以回车结束输入(可以包含空格),没有限制读入的长度,如果太长,可能导致堆栈溢出;

  2. scanf函数(包括cin)用来读取字符数组时,中间出现空格读入结束(以空格符、回车符、Tab符结束一次输入),但是scanf函数要比cin效率高很多;

  3. getchar每次读入一个字符,读入效率最高。

快速读入数字字符串函数(提前预告,学了函数调用之后,就很容易理解了)