原代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int N,M;
cin>>N>>M;
int count=0,isprime=0;
string s;
for(int i=0;i<N;i++){
cin>>s;
for(int j=0;j<s.length();j++){
if(s.substr(j,4)=="easy" || s.substr(j,7)=="qiandao"){
break;
}
}
count++;
if(count==M){
cin>>s;
cout<<s;
isprime==1;
}
}
if(isprime==0){
cout<<"Wo AK le";
}
return 0;
}
运行结果:
问题出在了cin,cin输入是到一个空格就停止的,而题目输入数据每一行里面都有空格,因此这个方法是行不通的。
柳神代码
#include <bits/stdc++.h>
using namespace std;
int n, m, cnt=0;
string s, ans;
int check(string a) {
for (int i = 0; i < a.length(); i++)
if (a.substr(i, 7) == "qiandao" || a.substr(i, 4) == "easy") return 1;
return 0;
}
int main() {
cin >> n >> m;
getchar();
for (int i = 0; i < n; i++) {
getline(cin, s);
if (check(s)) continue;
else {
if (cnt == m) ans = s;
cnt++;
}
}
if (cnt <= m) cout << "Wo AK le";
else cout << ans;
return 0;
}
分析:用getline整行输入带空格字符串,用cnt记录非签到题数量,并查询其中是否带有”qiandao”或”easy”,当cnt等于m时,用ans记录当前正在做的题目对应的题面。如果cnt的数量小于等于m,则表示已经AK~
要点简析:
-
int check(string a)
:定义了一个函数check()
,用于检查输入的字符串中是否包含特定的子串,如果包含则返回1,否则返回0。 -
getchar();
:读取并丢弃输入缓冲区中的换行符,以防止影响后续的getline()
操作。 -
getline(cin, s);
:使用getline()
函数从标准输入读取一行字符串,并将其存储到变量s
中。 -
if (cnt == m) ans = s;
:如果计数器cnt
的值等于m
,则将当前字符串s
赋值给变量ans
。