一开始我不明白,怎么把一句话分割输入,并且判断
下面是先输入在判断,如果逗号前面时候ong并且.前面也是ong那就是押韵的
并且根据空格判断第几个单词
#include <iostream>
using namespace std;
typedef long long ll;
const int maxn = 1e5 + 10;
string s;
int main() {
int n;
cin >> n;
getchar();
while (n--) {
getline(cin, s);
int f1 = 0, f2 = 0, num = 0;
for (int i = 0; i < s.size(); ++i) {
if (s[i] == ',')
if (s[i - 3] == 'o' && s[i - 2] == 'n' && s[i - 1] == 'g')
f1 = 1;
if (s[i] == '.')
if (s[i - 3] == 'o' && s[i - 2] == 'n' && s[i - 1] == 'g')
f2 = 1;
if (s[i] == ' ')
num++;
}
if (f1 && f2) {
for (int i = 0; i < s.size(); ++i) {
if (num == 2)
break;
cout << s[i];
if (s[i] == ' ')
num--;
}
cout << "qiao ben zhong.";
} else {
cout << "Skipped";
}
cout << "\n";
}
return 0;
}
下面判断有点不同,他是分成两个输入,把getline玩明白了属于是
然后倒序判断该在哪里输出
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
while (n--) {
cin.get(); // 和getchar效果一样
string s1, s2;
getline(cin, s1, ',');
getline(cin, s2, '.');
int l1 = s1.size(), l2 = s2.size();
if (s1[l1 - 1] != 'g' || s1[l1 - 2] != 'n' || s1[l1 - 3] != 'o' || s2[l2 - 1] != 'g' || s2[l2 - 2] != 'n'
|| s2[l2 - 3] != 'o')
puts("Skipped");
else {
cout << s1 << ',';
int i, cnt = 0;
for (i = s2.size(); i >= 0; i--) {
if (s2[i] == ' ')
cnt++;
if (cnt == 3)
break;
}
for (int j = 0; j <= i; j++)
cout << s2[j];
cout << "qiao ben zhong.\n";
}
}
return 0;
}