-4

例如:你好吗?----> woh 时代 uoy?

这是我的代码,我得到了它的工作,但问号也被颠倒了。我怎样才能让它保持原样?

#include <iostream>
using namespace std;
int main()
{
    string ch;
    while(cin >> ch)
    {
         for(int i = ch.length() - 1; i >= 0; i--)
         {
             cout << ch[i];
         }
         cout << " ";
    }
    return 0;
}
4

4 回答 4

2

您选择的输入法 ( cin >> ch) 会自动将输入拆分为单独的单词。就像Jerry Coffin在他的回答中所说的那样,您必须跳过标点符号等才能找到要交换的字母字符。大致是这样的:

#include <iostream>
#include <string>
#include <cctype>
using namespace std;

int main()
{
    string ch;
    while (cout << "String? " && cin >> ch)
    {
        cout << "Input:  <<" << ch << ">>\n";
        const char *bp = ch.c_str();
        const char *ep = ch.c_str() + ch.length() - 1;
        const char *sp = ch.c_str();
        while (sp < ep)
        {
            while (sp < ep && (*sp != ' ' && !isalpha(*sp)))
                sp++;
            while (sp < ep && (*ep != ' ' && !isalpha(*ep)))
                ep--;

            char c = *sp;
            ch[sp-bp] = *ep;
            ch[ep-bp] = c;
            sp++;
            ep--;
        }
        cout << "Output: <<" << ch << ">>\n";
    }
    cout << endl;
    return 0;
}

示例对话

String? How are you?
Input:  <<How>>
Output: <<woH>>
String? Input:  <<are>>
Output: <<era>>
String? Input:  <<you?>>
Output: <<uoy?>>
String? Pug!natious=punctuation.
Input:  <<Pug!natious=punctuation.>>
Output: <<noi!tautcnu=psuoitanguP.>>
String?

你可以从这里调整它。我远非声称这是惯用的 C++。const char *中间的使用显示了我的C背景。

于 2013-10-26T05:34:11.153 回答
1

从字符串的开头开始,向前扫描,直到找到一个字母。从末尾向后扫描,直到找到一个字母。交换它们。继续直到两个位置相遇。

注意:上面我使用了“字母”,但我真正的意思是“应该反转的字符之一”。您还没有非常准确地定义应该交换哪些字符,哪些不应该交换,但我假设您(或您的老师)心中有一个相当具体的定义。

于 2013-10-26T05:28:03.210 回答
0

尝试使用数组并扫描每个字母以查看是否有问号。如果有,将其移动到数组的最后一个位置。

于 2013-10-26T04:59:40.777 回答
0

简单的解决方案或破解来单独解决这种情况。如果有更多案例评论,它可以一起解决。

#include <iostream>
using namespace std;
int main()
{
    string ch;
    while(cin >> ch)
    {
        int flag = 0;
        for(int i = ch.length() - 1; i >= 0; i--)
        {
                if(ch[i] != '?')
                        cout << ch[i];
                else
                        flag = 1;
        }
        if(flag)
                cout << "?";
        else
                cout << " ";
    }
    return 0;
}
于 2013-10-26T05:36:45.803 回答