cin:接受一个字符串,遇到换行符,空格,tab就结束。不会读入‘\n’,所以如果接下来需要用getline(cin,str)那么就需要一个getchar();
getline(cin,str):读入一个string,可以接受空格并输出。
cin.getline(char*,len):读入一个字符串并输出。
先给出结论:
1、getline(cin,str)读取换行符 并且将换行符替换成'\0',并将换行符从输入队列中抹去。
2、cin不会读入换行符;//这个总所周知,但是可以利用这个特点来连续读入任意个字符串。
3、cin.getline(char*,len)读取换行符并替换成'\0',并将换行符从输入队列中抹去
验证程序:
1、getline(cin,str)读取换行符 并且将换行符替换成’\0’,并将换行符从输入队列中抹去。
#include<bits/stdc++.h>
using namespace std;
map<string,set<int> > mp;
int main(){
string str;
// cin>>str;
getline(cin,str);
char c = getchar();
if(c=='\n') cout<<"读入了换行符"<<endl;
else cout<<c;
}
运行结果
可以看到getchar读入的并不是换行符,说明getline将输入队列中的‘\n’给处理掉了。
2、cin不会读入换行符;//这个总所周知,但是可以利用这个特点来连续读入任意个字符串。
#include<bits/stdc++.h>
using namespace std;
map<string,set<int> > mp;
int main(){
string str;
cin>>str;
// getline(cin,str);
char c = getchar();
if(c=='\n') cout<<"读入了换行符"<<endl;
else cout<<c;
}
运行结果:
可以看到cin没有将输入队列中的‘\n’给处理掉
这样我们可以利用这个特点连续读入任意个字符串
while(cin>>info){
//对字符串的操作
char c = getchar();
if(c=='\n') break;
}
3、 ## cin.getline(char*,len)读取换行符并替换成’\0’,并将换行符从输入队列中抹去
#include<bits/stdc++.h>
using namespace std;
map<string,set<int> > mp;
int main(){
char ch[20];
cin.getline(ch,20);
// getline(cin,str);
char c = getchar();
if(c=='\n') cout<<"读入了换行符"<<endl;
else cout<<c;
}
运行结果:
可以看到cin.getline()也将换行符读入,并且将输入队列中的‘\n’处理掉了。