我在创建一个扭转句子顺序的函数时遇到了困难。我已经阅读了许多关于如何递归地反转周围字母的函数,并且我已经成功地完成了,但我不想反转字母中的字母。我想颠倒句子中单词的位置。
示例是:
这是一句话。
句子。这是
到目前为止,这是我的代码。如何从整个句子的字母顺序转换为句子中单词的放置顺序?
当前代码的输出将提供:!dlroW olleH
void reverse(const std::string str)
{
int length = str.size();
if(length > 0)
{
reverse(str.substr(0,length-1));
std::cout << str[0];
}
}
编辑:其他问题。如果这是一个char数组,逻辑会不同吗?
答案 0 :(得分:5)
使用std::istringstream
和帮助函数简化您的逻辑。下面的程序适合我。
#include <sstream>
#include <iostream>
void reverse(std::istringstream& stream)
{
std::string word;
if ( stream >> word )
{
reverse(stream);
std::cout << word << " ";
}
}
void reverse(const std::string str)
{
std::istringstream stream(str);
reverse(stream);
std::cout << std::endl;
}
int main(int argc, char** argv)
{
reverse(argv[1]);
return 0;
}
答案 1 :(得分:1)
std::vector<std::string> splitString(const std::string &s, char delim) {
std::stringstream ss(s);
std::string item;
std::vector<std::string> tokens;
while (getline(ss, item, delim)) {
tokens.push_back(item);
}
return tokens;
}
void reverseString(const std::string& string) {
std::vector<std::string> words = splitString(string, ' ');
auto end = words.rend();
for (auto it = words.rbegin(); it <= end; it++) {
std::cout << *it << std::endl;
}
}
reverseString("This is a sentence.");
答案 2 :(得分:1)
// Pass string which comes after space
// reverse("This is a sentence.")
// reverse("is a sentence.")
// reverse("a sentence.")
// reverse("sentence.")
// will not find space
// start print only word in that function
void reverse(const std::string str)
{
int pos = str.find_first_of(" ");
if (pos == string::npos) // exit condition
{
string str1 = str.substr(0, pos);
cout << str1.c_str() << " " ;
return;
}
reverse(str.substr(pos+1));
cout << str.substr(0, pos).c_str() << " ";
}
简单易懂:
void reverse(const std::string str)
{
int pos = str.find_first_of(" ");
if (pos != string::npos) // exit condition
{
reverse(str.substr(pos + 1));
}
cout << str.substr(0, pos).c_str() << " ";
}
答案 3 :(得分:1)
您可以拆分输入并按相反顺序打印它们 或者如果你想使用递归结构,只需在调用这样的函数后移动cout:
void reverse(const std::string str)
{
std::stringstream ss(str);
std::string firstWord, rest;
if(ss >> firstWord)
{
getline(ss , rest);
reverse(rest);
std::cout << firstWord << " ";
}
}
答案 4 :(得分:0)
我不是C ++程序员,但我会创建另一个数组(tempWord [])来存储单个单词。
扫描每个单词并将它们存储到tempWord数组中。在您的情况下,单词由空格分隔,所以:
a。下一个空格的索引,
b子串到下一个空格的索引和
℃。你应该得到{“This”,“is”,“a”,“sentence。”}
反向再次添加:
一个。循环索引i从“tempWord.length -1”到“0”
湾new String = tempWord [i] +“”;
打印出结果。