c++ - 颠倒句子中的词序

标签 c++ recursion

我在创建一个颠倒句子顺序的函数时遇到了困难。我读过很多关于如何递归反转字母的函数,我已经成功地做到了,但我不想反转单词中的字母。我想颠倒句子中单词的位置。

例子是:

这是一个句子。

句子。 a是这个

到目前为止,这是我的代码。如何从整个句子的字母顺序反转到句子中单词的放置顺序?

当前代码的输出将提供:!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];

    }
}

编辑:附加问题。如果这是一个字符数组,逻辑会有所不同吗?

最佳答案

使用 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;
}

关于c++ - 颠倒句子中的词序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42105689/

相关文章:

c++ - 创建线程安全单例时的临界区初始化(C++)

c++ - 将键码的字符串表示形式转换为 Qt::Key(或任何 int)并返回

C++ Dll字符串函数崩溃

c 递归排序

mysql - 在这种情况下递归是最佳解决方案吗?

python - Python 是否可以在不使用递归的情况下生成排除一组数字的随机数?

c++ - 为什么 std::move( arg ) 改变 arg 参数?

SetLayeredWindowAttributes 和 BitBlt 之间的 C++ WinAPI 冲突

C++ 递归排序算法不需要数组长度

list - 列表串联 “the correct”的方法(使用尾递归)