"编写一个以字符串(字符指针)作为输入并返回字符串反转的函数。该函数应该反转字符串并将其作为函数的返回值返回。"
char *strrev(char *str) {
char* end = str;
char tmp = 0;
if(str) {
while(*end) {
end++;
}
--end;
while(end > str) {
tmp = *end;
*end-- = *str;
*str++ = tmp;
}
}
}
我是C ++的新手。我这面临着困难。你可以请更正我的代码。
答案 0 :(得分:3)
这是一个有趣的事情:
您不想要将此作为您的作业:/
#include <string>
std::string rev(std::string x)
{
auto a=x.begin();
auto b=x.rbegin();
while (a<b.base())
std::swap(*a++, *b++);
return x;
}
#include <iostream>
int main()
{
std::cout << rev("") << "\n";
std::cout << rev("1") << "\n";
std::cout << rev("12") << "\n";
std::cout << rev("123") << "\n";
std::cout << rev("Hello world!") << "\n";
}
输出:
1
21
321
!dlrow olleH
答案 1 :(得分:1)
所以你的函数strrev
声称会返回char *
,但它会返回......嗯......没有。这意味着如果你使用这个函数的返回值,你正在读一些随机内存。在这一点上,你处于未定义行为的境界,任何事情都会发生。
您的编译器应该警告过您,并且您应该学会阅读并理解这些警告 - 它们是有原因的。如果,它没有警告你,你需要提高编译器生成的警告。
修复函数以返回正确的值后,它将按预期工作。这是一个提示:如果你想反转字符串到位那么字符串的开头在哪里可以找到内存?
答案 2 :(得分:0)
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());
}