在C++中反转一个字符串

在C++中反转一个字符串,c++,string,reverse,C++,String,Reverse,编写一个函数,以字符串指针作为输入并返回反转的字符串。函数应该将字符串反转到位,并将其作为函数的返回值返回 字符*strevchar*str{ char*end=str; char-tmp=0; ifstr{ while*结束{ end++; } -结束; whileend>str{ tmp=*结束; *end-=*str; *str++=tmp; } } } 我是C++新手。我在这方面面临困难。你能纠正我的代码吗。这里有一个有趣的代码: 您不想将此作为您的任务提交:/ 看到了吗 STL中有一个

编写一个函数,以字符串指针作为输入并返回反转的字符串。函数应该将字符串反转到位,并将其作为函数的返回值返回

字符*strevchar*str{ char*end=str; char-tmp=0; ifstr{ while*结束{ end++; } -结束; whileend>str{ tmp=*结束; *end-=*str; *str++=tmp; } } } 我是C++新手。我在这方面面临困难。你能纠正我的代码吗。

这里有一个有趣的代码:

您不想将此作为您的任务提交:/

看到了吗


STL中有一个标准算法,可以反转一个范围

char *strrev(char *str) {
    const size_t n = strlen(str);
    std::reverse(str, str+n);
    return str;
}
<>或更好的使用C++字符串

void reverse(std::string& s) {
    std::reverse(s.begin(), s.end());
}
所以你的函数strev声明返回一个char*但它返回。。。好没有什么这意味着如果你使用这个函数的返回值,你正在读取一些随机内存。在这一点上,你处于未定义行为的领域,任何事情都会发生

你的编译器应该警告你这一点,你应该学会阅读和理解这些警告——它们存在是有原因的。如果它可能没有警告您,您需要启动编译器生成的警告


一旦修复函数以返回正确的值,它将按预期工作。这里有一个提示:如果您想在适当的位置反转字符串,那么字符串的起始位置在内存中的什么位置?

答案已经存在于stackoverflow上,这里重新发明std::reverse,然后在要求到位后,您按值取字符串,从而复制它?是的@PeterT,这就是我所做的。我这样做是因为a算法已经就位,b如果参数已经更新,返回值是没有意义的。另外,我希望你不要忘记在这里用舌头捂住脸颊+1来解释事情
char *strrev(char *str) {
    const size_t n = strlen(str);
    std::reverse(str, str+n);
    return str;
}
void reverse(std::string& s) {
    std::reverse(s.begin(), s.end());
}