请问c++这个如何解,不知道怎么将一整个字符串三个三个划分

描述

回文单词句式是英文中很有趣的一种句式,这种句式的特点是对称位置的两个单词是相同的,例如abc def jkl def abc就是一个回文单词句式。现在请你判断一个句式是否是回文单词句式。

输入
输入首先包含一个正整数n,表示有n个需要判断的字符串。

接下来n行,每行包含一串包含若干个单词的字符串,每个单词之间用一个空格隔开,字符串总长度不超过1000。

输出
输出共n行,表示该字符串是否是回文句式,如果是则输出YES,否则输出NO。每个字符串的输出结果占一行。

输入样例 1

1
abc def jkl def abc
输出样例 1

YES

读入一整行再判断是不是回文,或者每次读一个单词存起来直到读入回车结束

img

#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;
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632