在C++中如何高效灵活的读入字符串一直是一个困扰许多初学者的问题,现在我就来尝试整理一些C++中读入字符串的方法。
为了方便速查,我将几种常见的情况做归类:
不能读取空格,也不能读取回车
1.一般的cin读入方法:
即:
string s;
cin>>s;
优点:几乎所有人都知道这么用(博主在整理之前似乎也最熟练用这种)
缺点:不能读取空格和回车,非常不方便。
能读取空格,但不读取回车(想整行整行操作)
string中的getline函数。
string s;
getline(cin,s);
iostream 中的gets()函数
char s[20];
gets(h);
//注意,gets()里面的参数不能用string类
编程法,也称构造法
int main(){
string s;
char h[20];
char hs;
char* ss;
while(cin.get(hs)){
ss=new char;
*ss=hs;
s+=ss;
if(hs=='\n')
break;
}
cout<<s<<endl;
return 0;
}
这种方法好处很多啦,而且还可以通过在while内添加语句来自由切换是否需要接收空格。
string中默认属性的getline函数
string s;
getline(s);
//这里s可用char数组代替
cin.getline()函数
char c[20];
cin.getline(c,'u');//遇到u或回车结束
cin.getline( c );//遇到回车结束
注意:遇到’u’结束读取,但’u’依然读入到了c中。
既能读取回车又能读取空格
字符串的getline函数:
string s
getline(cin,s,'p');//这里第一个参数一定是cin!!!
getline不加参数时是默认以回车结束的,但getline的强大在于可以自定义遇到什么参数停止读入,像例子中就是以读到小写p结束。
万能的构造法
string s;
char h[20];
char hs;
char* ss;
while(cin.get(hs)){
ss=new char;
*ss=hs;
s+=ss;
if(hs=='8')
break;
}
cout<<s<<endl;
return 0;
}
对象cin中的get()函数能读取回车,那我就一个个的读入,再把他们拼起来成为一个字符串,这种方法很好用而且也可以方便分词、改词。