如何使用C反转字符串
How to Reverse a string using C?
我正试图在Visual Studio 2008中运行以下代码。但在运行时,程序抛出错误
reverseString.exe中0x002e1480处未处理的异常:0xC0000005:写入位置0x002e573c时发生访问冲突。
void reverse(char *str)
{
char *end = str;
char tmp;
if (str)
{
while (*end)
{
++end;
}
--end;
while (str < end)
{
tmp = *str;
*str++ = *end; // Error Here
*end-- = tmp;
}
}
}
提前感谢您的大力帮助。
反转字符串很简单:
if (str) {
std::reverse(str, str + strlen(str));
}
然而,这种反转工作的前提是str
指向一个可写字符串,即它被声明为char*
,并且是而不是从字符串文字初始化的!尽管字符串文字可以用于初始化char*
对象,但它们不一定指向可写内存(在许多现代系统中,它们不指向可写存储器)。
如果您想知道std::reverse()
的天真实现会是什么样子:
template <typename BiDirIt>
void reverse(BiDirIt begin, BiDirIt end) {
for (; begin != end && begin != --end; ++begin) {
swap(*begin, *end);
}
}
std::reverse(str, str + std::char_traits<char>::length(str));
请注意,对于许多语言和编码,反转字符串会导致文本中断。
以下是如何从头开始
#include <iostream>
void reverse(char* input)
{
int size = strlen(input);
int half = size / 2;
for(int i = 0; i < half; ++i)
{
char temp = input[size - i - 1];
input[size - i - 1] = input[i];
input[i] = temp;
}
}
int main()
{
char word[] = "hello";
reverse(word);
std::cout << word;
}
我能够毫无问题地使用您的反向方法,请参阅下文。问题一定是你如何使用你传递的char*
int main()
{
char str[] = "Hello World!";
reverse(str);
cout << str << endl;
return 0;
}
这是的输出
!dlroW olleH
我想你这样称呼它是
char* mystr = "Hello";
reverse(mystr);
对吧?但您不能这样做,因为反向操作是修改字符串(请参阅此处),这会导致访问冲突。按照其他人的建议使用
char mystr[] = "Hello";
reverse(mystr)
也就是说,按照其他人的建议使用std::reverse是一个更好的解决方案。
另一种方法,如果您不喜欢/想要迭代器或反向函数。
string revStr(string str){
if (str.length() <= 1) {
return str;
}else{
return revStr(str.substr(1,str.length()-1)) + str.at(0);
}
}
相关文章:
- 接收字符串并使用它来调用方法C++
- 将 NULL 与 C 的字符* 字符串一起使用
- 如果结构中的字符串比使用的 p/调用签名长或短,会发生什么情况?
- 对函数的 out 字符串参数使用 swap 与赋值
- 修改向量中的字符串?(不使用循环)
- 不带连续 1 的位字符串,使用自上而下的 DP
- 包括<字符串>,使用不完整的类型"std::string"
- MSVC UTF8字符串编码使用了不正确的代码点
- 在字符串中使用变量
- 如何使此函数使用 getline 读取字符串并使用 int 执行相同的行为?
- 如何比较C 中的两个字符串并使用默认功能
- 在给定字符串上使用 tolower() 和 isalpha() 并将其输出设置为另一个字符串
- 将find_last_of与字符串C++一起使用
- 如何在处理C++字符串时使用内存集
- 在 c++ 中将 find_first_of 与字符串一起使用,而不是一组预定义字符
- C++17 std::basic_string_view 会使 C 字符串的使用无效吗?
- 检查字符串是否使用STD :: MAP包含重复
- 我在使用 cin.getline() 从用户那里获取 3 个字符串并使用指针数组来存储它们时遇到问题
- C 代码cout打印而不是等待在字符串中使用它
- 如何将adjacent_find与字符串C++一起使用