c语言getline与gets,c/c++ 字符和字符串读入小结(gechar cin getline gets) by slj

getchar:

逐个字符读入,可以读入一切字符,包括空格符和回车符。这个函数很通用,可以代替以下所有函数。注意getchar连回车符都接受,接受回车符意味着可以判断读入的字符是不是'\n'。但以下所有函数都不接受空格符和回车符。

用法: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 str; getline(cin,str);

gets:

以回车符为结束符 ,所以可以读入一个以回车符为结束符的c风格字符串

(1) 有时候,我们需要读入一行,将这一行的字符(可能包含空格)做为一个字符串,那么可以用一下三种方法

getline(cin,str)

gets:

getchar:用循环处理

示范代码如下:

#include#include#include

using namespacestd;

intmain()

{

/*

//读入一个以回车符为结束符的字符串:方法1:需要#include

string a;

getline(cin,a);

cout<

*/

/*

//读入一个以回车符为结束符的字符串:方法2:需要#include 或 #include

char s[20];

gets(s);

printf("%s",s);//或者cout<

*/

/*

//读入一个以回车符为结束符的字符串:方法3:需要#include 或 #include

char ch,s[20];

int i=0;

while((ch=getchar())!='\n') //注意, (ch=getchar())一定要有括号

{

s[i++]=ch;

//cout<

}

s[i]='\0';

printf("%s",s);//或者cout<

*/

return 0; }

(2) 有时候,我们需要逐个读入字符,可以根据情况灵活选择用getchar 和 cin,但是要注意它们有很重要的区别

如果程序需要接受回车符,那么用getchar方便书写代码。

如果程序不需要接受回车符,那么用cin比较方便。

以下示范代码说明了cin和getchar在逐个字符读入时的区别:

#include

using namespace std;

int main()

{

/*

//如果统计字符个数,输入 i am a stu后,按回车,以ctrl+z结束,结果为 7

char ch;

int i=0;

while(cin>>ch) i++;

cout<

*/

/*

//如果统计字符个数,输入 i am a stu后,以回车符结束,结果为10

char ch;

int i=0;

while((ch=getchar())!='\n') i++;

cout<

*/

//如果统计单词数目,输入 i am a stu后,按回车,以ctrl+z结束,结果为 4

char s[20];

int i=0;

while(cin>>s) i++;

cout<

return 0;

}

比如:NOIP2015地雷游戏,每一行中字符之间没有空格,行尾有回车符。最好用cin,因为如果用getchar(),读入程序的内循环的条件循环变量<=原有的列数+1,你还需要判断读入的是不是回车符或者做其他的处理。

地雷游戏读入地图代码如下:

#include

using namespacestd;

bool a[105][105];//一张地图,有雷为一,无雷为零

intmain()

{

memset(a,0,sizeof(a));//地图最开始清空

intn,m;

chartmp;

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值