我知道返回结束不正确,我正在考虑使用我的一个指针去结束,然后按字符串的大小返回以返回反向字符串。有没有更有效的方法呢?另外,更重要的是,我在这里遇到运行时错误吗? http://ideone.com/IzvhmW
#include <iostream>
#include <string>
using namespace std;
string Reverse(char * word)
{
char *end = word;
while(*end)
++end;
--end;
char tem;
while(word < end) {
tem = *word;
*word = *end;
*end = tem; //debug indicated the error at this line
++word;
--end;
}
return end;
}
int main(int argc, char * argv[]) {
string s = Reverse("piegh");
cout << s << endl;
return 0;
}
答案 0 :(得分:4)
您正在将“piegh”传递给Reverse,后者将转换为指向char的指针。指向char的指针指向只读字符串文字。也许你打算在尝试分配它之前复制字符串文字“piegh”:
char fubar[] = "piegh";
string s = Reverse(fubar);
毕竟,你怎么能证明"piegh"[0] = "peigh"[4];
?
答案 1 :(得分:-1)
这段代码的作用是什么?
while(*end)
++end; //Assuming you are moving your pointer to hold the last character but not sure y
--end;
//这个
while(word < end)
//我也不确定这是如何运作的
此代码适用于同一目的
char* StrReverse(char* str)
{
int i, j, len;
char temp;
char *ptr=NULL;
i=j=len=temp=0;
len=strlen(str);
ptr=malloc(sizeof(char)*(len+1));
ptr=strcpy(ptr,str);
for (i=0, j=len-1; i<=j; i++, j--)
{
temp=ptr[i];
ptr[i]=ptr[j];
ptr[j]=temp;
}
return ptr;
}