字符串中单词的反向顺序

use*_*198 6 c++ string reverse char

我正准备参加入门级面试.我试图扭转字符串中单词的顺序,但我的输出是一堆没有意义的垃圾.我认为问题可能是因为我的功能使用"char*"?无论如何,继承人我的代码

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

char* reverse(char* str, int a, int b); 
char* reversewords(char* str); 

int main()
{
    char str[] = "The interview is";
    cout<<"Reverse is: "<<reversewords(str); 
    cin.ignore();
    return 0;
}


char* reverse(char* str, int a, int b)
{
    int length = a-b;

    for (int i=a; i<b+1; i++)
    {
        char c =str[length-i-1];
        str[length-i-1]=str[i];
        str[i] = c;
    }
    return str;
}

char* reversewords(char* str)
{
    int length = strlen(str);
    int a=0;
    int b=0;
    while (b<length)
    {
        if (str[b]==' ' || b==length-1)
        {
                b=b-1;
            reverse(str, a, b);
            a=b+2;
            b=a;
        }
        b++;
    }
    return str;
}
Run Code Online (Sandbox Code Playgroud)

sha*_*een 5

我想重申WeaselFox所说的不重新发明轮子,尝试学习C++ STL,从长远来看会更有帮助.

话虽如此,我也建议采用一种方法.每当遇到诸如在字符串中反转字符顺序或在字符串中反转字样等问题时,访调员就会尝试测试您对数据结构的了解,在这种情况下,特别是"堆栈"数据结构.

考虑如果你在一个字符串中解析单词并将它们全部放入一个数组中会发生什么:"我是一个字符串" - > {"我","AM","A","STRING"}

现在对堆栈做同样的事情:

"我很棒" - > {"STRING","A","AM","我"}

你明白为什么堆栈会有用吗?如果你自己推理出来比我提供源代码更好,原因是你的方法不正确,无论它是否产生正确的答案.

我希望这有帮助!


Wea*_*Fox 1

让我推荐一种不同的方法。如果您使用 char 指针:

  1. 将字符串使用分割strtok成一个 s 数组char*
  2. 从末尾向后迭代这个单词数组并重新组装字符串。

如果您选择使用字符串和 STL 容器,请参阅此问题,了解如何将字符串拆分为标记,然后很好地重新组装它们:

在C++中分割字符串?

不要重新发明轮子总是一个更好的主意。使用库函数,不要自己操作字符。