关于#字符串#的问题,如何解决?

镜像字符串
题目描述

大家都知道,镜子能把内容左右颠倒,比如,你拿着一个单词"apple",用它的最后侧的字符'e'贴着镜子,看到的字符串一定是"elppa",我们把颠倒后的单词,称之为镜像单词。

现在有n个字符串,每个字符串中包含了若干被镜像的单词,请你编程将这些单词恢复原状。

请注意,不是整个字符串“颠倒”了,而是字符串中的每个单词“颠倒了”。

比如:有如下字符串"olleH kcaJ",这个字符串就包含了2个被“颠倒”的单词,将这两个单词恢复原状,结果应该是"Hello Jack"。

输入

第1行有一个整数n(n<=500)表示接下来有n行字符串需要我们来处理。

接下来n行,每行有一个字符串,字符串中包含了若干被“颠倒”的单词,单词之间使用一个或多个空格分隔。(一行最多有1000个字符)
输出

输出n行,每行表示对输入每行字符串处理的结果。
样例
输入

3
olleh !dlrow
I ekil .bulcmca
I evol .mca

输出

hello world!
I like acmclub.
I love acm.

#include<bits/stdc++.h>
using namespace std;
int main(){
    int T;
    cin>>T;
    while(T--){
        string s,a="",b="";
        cin>>s;
        for(int i=0;i<s.size();i++){
            char k=s[i];
            if(k!=32){
                a+=s[i];
            }else{
                cout<<a<<endl;
                reverse(a.begin(),a.end());
                b+=a;
                b+=" ";
            }
        }
        cout<<b<<endl;
    }
    return 0;
}

cin>>s;会以空格为分隔符。要用geline。getline(cin,s);

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int T;
    cin >> T;
    fflush(stdin);
    while (T--)
    {
        string s, a = "", b = "";

        getline(cin, s); // cin >> s;
        for (size_t i = 0; i <= s.size(); i++)
        {
            char k = s[i];
            if (k != ' ' && k != '\0')
            {
                a += s[i];
            }
            else
            {
                // cout << a << endl;
                reverse(a.begin(), a.end());
                b += a;
                b += " ";
                a = "";
            }
        }
        cout << b << endl;
    }

    return 0;
}