小菜鸡的练习之路
C++中关于字符串数组的输入问题
今天在做PAT (Basic Level) Practice 下面这道题时想用string类型的字符串数组,猛然发现不熟练这种类型的输入,甚至忘记了cin和get()、getline()的区别,特再写一遍,也给同样不熟悉的人再记起一次。以下代码块也以此题为例。
1、cin方式
cin输入方式以空格、Tab键以及回车作为结束标志。意味着这种方式不能输入上面三种字符,遇到这三个自动结束输入。
int main(){
string m[82];
int i=0;
char lu;
while(true){
cin>>m[i];
i++;
lu=getchar();
if(lu=='\n') break;
}
i--;
for(int j=i;j>0;j--) cout<<m[j]<<" ";
cout<<m[0];
}
特说明此方法我写时未想到以getchar()函数判断来结束输入,想着读到回车了就在while括号里判断,类似“(XX!=‘\n’)”这样,学习到了博主“__zz11”的写法,感谢大佬让我学到了一种写法,博文: link
2、getline()函数输入字符串
记得加上“#include”,以回车作为结束符,但是如果之前的输入是cin或者什么同样以回车作为结束符的输入,回车会被getline()读到,从而当做结束符结束getline的输入,这种情况我一般在两个中间加个char类型炮灰来解决。
string m;
getline(cin,m);
cout<<m<<endl;
例如这种情况,如果你输入x之后空格再输入m就不会有错,但如果你是输入x之后按回车就直接结束了。
int main(){
int x;
cin>>x;
string m;
getline(cin,m);
cout<<m<<endl;
}
加个炮灰就好了,这个问题和解决方式其实还蛮常见的
int main(){
int x;
cin>>x;
char p;
p=getchar();
string m;
getline(cin,m);
cout<<m<<endl;
}
谢谢啦,关于string类型的输入有其他方式的希望多多评论教教本菜啦