该程序的目标是获取用户输入,然后向后打印单词,但仍按用户键入的顺序进行。例如,用户输入“猫和老鼠很酷”,则该程序应输出“ 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;
}
答案 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;
}