函数getline(cin,str)使用时易错点
程序员文章站
2024-01-25 15:33:58
...
今天做题时,无意间发现一个在使用getline(cin,str)读入字符串时的易错点。
因为getline(cin,str)在读取字符串时是可以读入空格的,所以在部分题目输入的情况下,这种输入方式比cin和scanf要更加方便。
但非常要注意的是,如果开始输入的时候是数字,且使用cin读入时,空格是不会被读进来的,所以在后面循环读入时,getline(cin,str)会讲数字后的空格先读进来作为a[0],这也就导致了以n为界读取时,总是会少读取最后一行字符串。
这时就可以使用getchar()函数来读取第一行的换行,接着在循环内用getline(cin,str)函数读入字符串。
using namespace std;
#include<bits/stdc++.h>
int main(){
string a[105];
int n;
cin>>n;
getchar();//读取输入n后的换行
for(int i=0;i<n;i++)
{
getline(cin,a[i]);
// cout<<a[i]<<"\n";
}
// for(int i=0;i<n;i++) cout<<a[i]<<"\n";
string str="";
for(int i=0;i<n;i++)
{
for(int j=0;j<15;j++)
{
if(a[i][j] == 'T') str+=a[i][j-2];
}
}
// cout<<str<<"\n";
for(int i=0;i<str.length();i++)
{
if(str[i] == 'A') str[i]='1';
else if(str[i] == 'B') str[i]='2';
else if(str[i] == 'C') str[i]='3';
else if(str[i] == 'D') str[i]='4';
}
cout<<str;
return 0;
}