istream &getline( char *buffer, streamsize num, char delim );
istream &getline( char *buffer, streamsize num );
常见使用:
#include <iostream>
using namespace std;
#include <string>
int main(int argc, char **argv)
{
string s;
getline(cin, s);
cout<<s;
return 0;
}
#include <iostream>
using namespace std;
#include <string>
int main(int argc, char **argv)
{
string s;
getline(cin, s,'!');
cout<<s;
return 0;
}
此次遇到的问题
题目:L1-4 稳赢
输入样例:
2
ChuiZi
JianDao
Bu
JianDao
Bu
ChuiZi
ChuiZi
End
对于输入样例的处理,在clion编译器中,需要用cin将2后面的回撤键读入,不然会将回车当作一行读入。
#include <iostream>
using namespace std;
#include <string>
int main(int argc, char **argv)
{
int n,cnt=0;
cin>>n;
string s;
getline(cin,s);
while(1)
{
cout<<endl;
if(s=="End")
break;
cout<<cnt<<" "<<s;
cnt++;
getline(cin,s);
}
}
这个地方两者显示相同
而且这个地方不能用string,不然会出现下面这种情况。
有待解决
但本题的解,出现了很大的问题,通过上面的验证,我认为不应该出现的问题在代码中出现了错误,将本地代码修改后,才在PTA中跑过。
这是在C++(g++ 6.5.0)中运行通过
但在本地clion中,将第二行数据吃掉了
附上本题代码
#include<iostream>
#include<stdio.h>
#include<string>
#include<algorithm>
#include<math.h>
#include<map>
#include<queue>
#include<stack>
#include<vector>
using namespace std;
typedef long long ll;
//1 2 3
//3 1 2
string S[4]={"","ChuiZi","JianDao","Bu"};
map<string,int> mp;
string bing(string s)
{
int num;
if(mp[s]==1) num=3;
if(mp[s]==2) num=1;
if(mp[s]==3) num=2;
return S[num];
}
int main()
{
mp["ChuiZi"]=1;
mp["JianDao"]=2;
mp["Bu"]=3;
int n;
int cnt=0;
cin>>n;
char sss;
cin>>sss;
string s;
getline(cin,s);
int falg11=0;
while(1)
{
if(s=="End")
break;
if(falg11)
{
cout<<endl;
}
falg11=1;
if(cnt==n) {
cout << s;
cnt=0;
}
else {
cout << bing(s);
cnt++;
}
getline(cin,s);
}
return 0;
}