Mô tả: Cho 2 câu thơ viết liền nhau, mỗi câu cách nhau dấu gạch phải (/). Kiểm tra xem 2 câu thơ đó có phải là thơ lục bát không? Các câu thơ đã bỏ dấu tiếng Việt (tức tiếng Việt không dấu).
Luật kiểm tra:
Vần trong từ cuối của câu lục trùng với vần của từ thứ 6 trong câu bát.
Ví dụ về thơ lục bát đúng:
Lá vàng, đỏ rụng vào th[u]
Chị mây, chị gió liền r[u] chiếc cành
Rượu say men ái ân n[ồng]
Người vui duyên mới pháo h[ồng] tân hôn
Input:
– Dòng 1: Một số nguyên n cho biết số lượng cặp thơ cần kiểm tra
– n dòng tiếp theo: mỗi dòng là một cặp thơ, phân cách giữa hai câu là dấu gạch phải (/).
Ouput:
– n dòng, mỗi dòng là kết quả kiểm tra một cặp thơ. Nếu đúng thì ghi là TRUE, nếu sai thì ghi là FALSE
Ví dụ:
Input:
2
Mua sa roi giot gieng khoi/Con mong chi nua ai loi thuy chung
Ruou say men ai an nong/Nguoi vui duyen moi phao hoa tan hon
Output:
TRUE
FALSE
Code của mình:
#include <iostream>
#include <string>
using namespace std;
string Seperate(string &str);
int Locate(string str);
bool NotVowelCheck(string str);
int Process(string str, string a);
int CountWords(string str);
int main() {
string Poem[10], eightwords;
int n;
cin >> n;
cin.ignore();
for(int i = 0; i < n; i++) {
getline(cin, Poem[i]);
}
for(int i = 0; i < n; i++) {
eightwords = Seperate(Poem[i]);
if(CountWords(Poem[i]) != 6 || CountWords(eightwords) != 8) //kiem tra co dung la 6 8 khong
cout << "FALSE" << endl;
else {
if(Process(Poem[i], eightwords)) cout << "TRUE" << endl;
else cout << "FALSE" << endl;
}
}
}
//chia thanh 2 string
string Seperate(string &str) {
string EightWord = "";
EightWord = str.substr(str.find('/') + 1);
str.erase(str.find('/'));
return EightWord;
}
//Dinh vi tu thu 6 trong moi cau tho
int Locate(string str) {
int count = 0;
int pos = 0;
while(count < 5) {
if(str.at(pos) == ' ') count++;
pos++;
}
return pos;
}
//kiem tra nguyen am
bool NotVowelCheck(string str) {
string s = "aieou";
for(int i = 0; i < 5; i++) {
if(str.at(0) == s.at(i)) return false;
}
return true;
}
int Process(string str, string a) {
//giu tu thu 6 trong cau 1
str.erase(0, Locate(str));
//giu tu thu 6 trong cau
a.erase(0, Locate(a));
if(a.find(' ') >= 0)
a.erase(a.find(' '));
//giu lai phan van trong tu
while(NotVowelCheck(str)) {
str.erase(0, 1);
}
while(NotVowelCheck(a)) {
a.erase(0, 1);
}
//so sanh 2 phan van
if(!str.compare(a))
return 1; //2 phan van giong nhau, ket luan la tho luc bat
return 0; //nguoc lai
}
//dem so tu trong moi cau
int CountWords(string str) {
int count = 0;
for(int i = 0; i < str.length() - 1; i++)
if(isspace(str.at(i)) && !isspace(str.at(i + 1))) count ++;
if(isspace(str.at(0)))
return count;
else
return count + 1;
}