描述
回文单词句式是英文中很有趣的一种句式,这种句式的特点是对称位置的两个单词是相同的,例如abc def jkl def abc就是一个回文单词句式。现在请你判断一个句式是否是回文单词句式。
输入
输入首先包含一个正整数n,表示有n个需要判断的字符串。
接下来n行,每行包含一串包含若干个单词的字符串,每个单词之间用一个空格隔开,字符串总长度不超过1000。
输出
输出共n行,表示该字符串是否是回文句式,如果是则输出YES,否则输出NO。每个字符串的输出结果占一行。
输入样例 1
1
abc def jkl def abc
输出样例 1
YES
读入一整行再判断是不是回文,或者每次读一个单词存起来直到读入回车结束
#include <bits/stdc++.h>
using namespace std;
int main() {
string str;
int flag=0,i,n;
cin>>n;getchar();
while(n--){
getline(cin,str);
vector<string> arr;
istringstream ss(str);
string word;
while(ss>>word) {
arr.push_back(word);
}
for(size_t i=0; i<arr.size()/2; i++){
if(arr[i]!=arr[arr.size()-1-i]){
flag=1;
break;
}
}
if(flag==0)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}
不是三个三个,而是判断单词是否是回文,abc,def代表单词,不一定三个字符。
方法是将字符串中的单词分解出出来,存储到单词数组,然后用strcmp从两头开始逐个比较单词是否相同就可以了
#include <iostream>
#include <string.h>
using namesapce std;
char words[1000][1000] = {0};
int nwords = 0;
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
nwords = 0;
do
{
cin>>words[nwords++];
}while(cin.get() != '\n');
int j=0;
for(;j<nwords/2;j++)
{
if(strcmp(words[j],words[nwords-j-1]) != 0)
break;
}
if(j==nwords/2)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!