C++ 使用返回值反转字符串时出现问题?
我试图反转字符串,返回值作为反转字符串,输入参数作为输入字符串。 这是我的密码:C++ 使用返回值反转字符串时出现问题?,c++,C++,我试图反转字符串,返回值作为反转字符串,输入参数作为输入字符串。 这是我的密码: char* reverseString(char* string) { static int i = 0; static char *revStr = new char[strlen(string)+1]; if (*string) { reverseString(string + 1); revStr[i++] = *string; }
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;;
}
我在visual studio 2013中尝试了此功能。我希望输出为:
ti-tseT
按任意键继续代码>
但我没有得到正确的输出,在“tseT”之后添加了一些不需要的字符。有人能给我推荐一下吗?我不想更改函数参数和返回语法。您需要注意最后的'\0'
尝试添加else
语句:
if (*string)
{
revStr[i++] = *string;
reverseString(string + 1);
}
else
revStr[i] = '\0';
请解释为什么不使用std::string
?如果这是一个有限制的作业,你应该把它们包括在问题中,这样我们才能给出适当的答案。使用string类或c++11,我可以轻松地完成它,但我的意图不是这样。我只想更正我的函数体。您没有在末尾添加原始c字符串结束指示符'\0'
。这个问题可能还有很多重复的地方。@A.Gupta刚刚把revStr[i]='\0'
在return
语句之前。@A.Gupta还请注意,您只需使用算法即可实现所需的功能。实际上,您不需要使用std::string
来执行此操作。我尝试了此操作,但在设置revStr[I++]
后,仍会在“tseT”的末尾获得相同的不需要的字符,从而进行递归调用。选中编辑。在返回字符串之前,我们不需要“else”,只需要“revStr[i]='\0';”。
if (*string)
{
revStr[i++] = *string;
reverseString(string + 1);
}
else
revStr[i] = '\0';