在C++中反转一个字符串
Reverse a string in place in C++
"编写一个以字符串(字符指针)为输入并反向返回字符串的函数。该函数应将字符串反向并将其作为函数的返回值返回。"
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++新手。我在这方面遇到了困难。你能纠正我的代码吗。
这里有一个有趣的:
您将不希望将其作为您的任务:/
查看Coliru直播
#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
因此,您的函数strrev
声称返回char *
,但它返回。。。好没有什么这意味着,如果你使用这个函数的返回值,你正在读取一些随机内存。在这一点上,你处于未定义行为的领域,任何事情都会发生。
你的编译器应该已经警告过你这一点,你应该学会阅读和理解这些警告——它们存在是有原因的。如果它可能没有警告您,您需要启动编译器生成的警告。
一旦您修复了函数以返回正确的值,它就会按预期工作。这里有一个提示:如果你想在的位置反转字符串,那么字符串的开头在内存中的位置是什么?
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());
}
相关文章:
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 如何检查一个c++字符串中有多少相同的字符/数字
- 获取用C/C++打印的最后一个字符串
- cin >> int 给定一个字符串将 int 赋值为 0
- 我如何通过引用将 c++ 字符串分配给另一个字符串
- 使用另一个字符串从字符串中删除空格
- 有没有办法使用 strcpy 将字符串数组复制到另一个字符串或其他数组中?
- 当分配一个字符串值并稍后通过分配另一个值进行更改时C++如何管理内存?
- 我已经建立了递归关系,它找到了两个字符串之间最长的连续公共字符串,我怎么能跳过其中一个字符串中的一个字符
- C++为 void 指针分配一个字符串
- 如何在使用 getch 后在另一个字符串的末尾连接一个字符串
- 给定一个单词数组和一个字符串,如何计算给定字符串中的所有单词
- 如何在另一个字符串的x位置插入一个字符串?
- 有没有办法我可以在 C++ 中使用 if 语句来说明如果一个字符串不是两个名称的 eqal,它会给出一个输出,ATM i
- 在另一个字符串中插入文件扩展名之前的字符串
- 我有一个返回字符串向量的函数.它需要两个字符串,并且返回一个字符串中缺少的字符串
- C++自定义流操纵器,用于更改流上的下一个字符串
- 从类返回一个字符串 — 奇怪的行为
- 从我的2d数组中的一列返回的字符串值被压缩为一个字符串(在Mac os上打开Windows txt文件)
- 你能从"volatile const char*"构造一个字符串吗?(不使用`const_cast`