getchar:
逐个字符读入,可以读入一切字符,包括空格符和回车符。这个函数很通用,可以代替以下所有函数。注意getchar连回车符都接受,接受回车符意味着可以判断读入的字符是不是' '。但以下所有函数都不接受空格符和回车符。
用法:char ch; ch=getchar();
cin:
既可以读字符,又可以读字符串。不接受空格符和回车符。
如果程序需要逐个读字符,可以用cin。用法:char ch; cin>>ch;
如果程序需要读入空格为结束符的字符串,一行输入多个字符串,字符串之间以空格为间隔。比如一行输入多个姓名,程序按姓名排序。
用法:char s[20];循环中调用cin>>s ; 或者string s; 循环中调用cin>>s;
getline(cin,str):
以回车符为结束符 ,可以读入一个以回车符为结束符的string(c++风格字符串)。需要include <string>
用法:string str; getline(cin,str);
gets:
以回车符为结束符 ,所以可以读入一个以回车符为结束符的c风格字符串
(1) 有时候,我们需要读入一行,将这一行的字符(可能包含空格)做为一个字符串,那么可以用一下三种方法
getline(cin,str)
gets:
getchar:用循环处理
示范代码如下:
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int main()
{
/*
//读入一个以回车符为结束符的字符串:方法1:需要#include<string>
string a;
getline(cin,a);
cout<<a;
*/
/*
//读入一个以回车符为结束符的字符串:方法2:需要#include<iostream> 或 #include<cstdio>
char s[20];
gets(s);
printf("%s",s);//或者cout<<s;
*/
/*
//读入一个以回车符为结束符的字符串:方法3:需要#include<iostream> 或 #include<cstdio>
char ch,s[20];
int i=0;
while((ch=getchar())!='
') //注意, (ch=getchar())一定要有括号
{
s[i++]=ch;
//cout<<i;
}
s[i]=' ';
printf("%s",s);//或者cout<<s;
*/
return 0;
}
(2) 有时候,我们需要逐个读入字符,可以根据情况灵活选择用getchar 和 cin,但是要注意它们有很重要的区别
如果程序需要接受回车符,那么用getchar方便书写代码。
如果程序不需要接受回车符,那么用cin比较方便。
以下示范代码说明了cin和getchar在逐个字符读入时的区别:
#include<iostream>
using namespace std;
int main()
{
/*
//如果统计字符个数,输入 i am a stu后,按回车,以ctrl+z结束,结果为 7
char ch;
int i=0;
while(cin>>ch) i++;
cout<<i;
*/
/*
//如果统计字符个数,输入 i am a stu后,以回车符结束,结果为10
char ch;
int i=0;
while((ch=getchar())!='
') i++;
cout<<i;
*/
//如果统计单词数目,输入 i am a stu后,按回车,以ctrl+z结束,结果为 4
char s[20];
int i=0;
while(cin>>s) i++;
cout<<i;
return 0;
}
比如:NOIP2015地雷游戏,每一行中字符之间没有空格,行尾有回车符。最好用cin,因为如果用getchar(),读入程序的内循环的条件循环变量<=原有的列数+1,你还需要判断读入的是不是回车符或者做其他的处理。
地雷游戏读入地图代码如下:
#include<bits/stdc++.h>
using namespace std;
bool a[105][105];//一张地图,有雷为一,无雷为零
int main()
{
memset(a,0,sizeof(a));//地图最开始清空
int n,m;
char tmp;
cin>>n>>m;
for(int i=1;i<=n;i++)//读入地图
{
for(int j=1;j<=m;j++)
{
cin>>tmp;//读入每一个点
if(tmp=='*') a[i][j]=1;//如果是地雷就将这个点设为一
}
}
}
(3)有时候,我们需要读入一行字符,这一行字符中包含以空格为间隔的多个字符串。
比如:输入一个英文句子,统计单词的数量。
这种情况,不能用gets,getline,可以用getchar,cin,但从代码书写方面来看cin最方便,当然用getchar会使得程序运行更快
用法:循环中调用cin。while(cin>>str) 。如果事先不知道一行中字符或字符串的数量,则输入完先回车,再以ctrl+z结束。代码见(2)