acwing 3199
#include<bits/stdc++.h>
using namespace std;
const int N = 30;
bool y[N], n[N];
string res[N];
int main()
{
string str;
cin >> str;
for(int i = 0; i < str.size(); i ++)
if(i + 1 < str.size() && str[i+1] == ':') y[str[i++]-'a'] = true;
else n[str[i]-'a'] = true;
int t;
cin >> t;
getchar();
for(int i = 1; i <= t; i ++)
{
printf("Case %d: ", i);
getline(cin, str);
stringstream ss(str);
vector<string> v;
while(ss >> str) v.push_back(str);
for(int i = 0; i < 26; i ++) res[i].clear();
for(int i = 1; i < v.size(); i ++)
{
string u = v[i];
if(u.size() != 2 || u[0] != '-' || u[1] < 'a' || u[1] > 'z') break;
if(n[u[1]-'a']) res[u[1]-'a'] = "yep";
else if(y[u[1]-'a'] && i + 1 < v.size()) res[u[1]-'a'] = v[++i];
else break;
}
for(int i = 0; i < 26; i ++)
if(res[i].size())
{
printf("-%c ", (char)(i + 'a'));
if(y[i]) cout << res[i] << ' ';
}
printf("\n");
}
}
注意事项
1 用getchar()把用getline之前的回车读掉
2 用法
string s;
getline(cin, s);
stringstream ss(s);
while(s >> ss){
do something
}
3 可以把每段字符串送到vector里
vector<string> vs;
while(s >> ss) vs.push_back(ss);