反转后如何使字符串按顺序打印

时间:2018-11-09 15:43:06

标签: c++

该程序的目标是获取用户输入,然后向后打印单词,但仍按用户键入的顺序进行。例如,用户输入“猫和老鼠很酷”,则该程序应输出“ stac dna ecim时代疯子”,但我得到的是“ locc时代ecim dna疯子”。我认为在主函数中会发生单词的重新排列,但是我不确定如何使它按顺序打印。任何帮助,不胜感激!

#include <iostream>
#include <cstring>

using namespace std;

void reverse(string input) {
    int size = (int)input.size();

    if(size==1){
        cout << input[size-1];
    }
    else {
        cout << input[size-1];
        reverse(input.substr(0, size-1));
    }
}

int main() {
    string input;
    char choice;    

    cout << "Please enter a string with spaces." << endl;
    getline(cin, input);
    reverse(input);
    cout << endl;
}

1 个答案:

答案 0 :(得分:2)

您要反转整个字符串...在空格处分割字符串,然后在分割上循环并在打印每个分割之前调用reverse()

此外,您可以使用C ++ STL类进行反转,甚至可以得到有用的拆分结果:

#include <iostream>
#include <string>
#include <vector>
#include <sstream>

std::vector<std::string> split(std::string text, char delimiter)
{
    std::vector<std::string> res;
    std::istringstream f(text);
    std::string s;

    while (std::getline(f, s, delimiter)) {
        res.push_back(s);
    }

    return(res);
}

int main() {
    std::string input;

    std::cout << "Please enter a string with spaces." << std::endl;
    std::getline(std::cin, input);

    for(auto s : split(input, ' '))
    {
        std::reverse(s.begin(), s.end());
        std::cout << s << " ";
    }

    std::cout << std::endl;
}