【问题标题】:Issue in reversing a string with return value? [duplicate]反转带有返回值的字符串的问题? [复制]
【发布时间】:2018-08-05 18:42:42
【问题描述】:

我正在尝试将返回值作为反转字符串并将输入参数作为输入字符串反转字符串。 这是我的代码:

char* reverseString(char* string)
{
    static int i = 0;
    static char *revStr = new char[strlen(string)+1];
    if (*string)
    {
        reverseString(string + 1);
         revStr[i++] = *string;
    }
    return revStr;
}
int main(void)
{
    char* str = "Test it";
    cout << reverseString(str) << endl;;
}

输出:

ti tseT═²²²²
Press any key to continue . . .

我在 Visual Studio 2013 中尝试过这个。我期望输出是:

ti tseT Press any key to continue . . .

但我没有得到正确的输出,在“tseT”之后添加了一些不需要的字符。有人可以建议我吗?我不想更改函数参数和返回语法。

【问题讨论】:

  • 请解释您为什么不使用std::string?如果这是一项有限制的作业,您应该将它们包含在问题中,以便我们给出适当的答案。
  • 使用字符串类或 c++11 我可以轻松做到这一点,但我的意图并非如此。我只是想纠正我的函数体。
  • 您错过了将原始 c 字符串结束指示符 '\0' 放在末尾。这个问题可能还有很多重复。
  • @A.Gupta 只需将revStr[i] = '\0'; 放在return 语句之前。
  • @A.Gupta 另请注意,您可以简单地使用std::reverse() 算法来实现您想要的。您实际上不需要使用std::string 来执行此操作。

标签: c++


【解决方案1】:

你需要照顾最后的'\0'

尝试添加else 语句:

if (*string)
{
     revStr[i++] = *string;
    reverseString(string + 1);
}
else
    revStr[i] = '\0';

【讨论】:

  • 我试过了,但在 "tseT" 末尾仍然得到相同的不需要的字符
  • 设置revStr[i++]后进行递归调用。检查编辑。
  • 我们不需要“else”,只需要“revStr[i] = '\0';”在返回字符串之前。
猜你喜欢
  • 2020-02-08
  • 2017-04-19
  • 2020-06-19
  • 1970-01-01
  • 2017-04-16
  • 1970-01-01
  • 2020-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多