1

我知道 return end 不正确,我正在考虑使用我的指针之一走到末尾,然后按字符串的大小返回以返回反转的字符串。有没有更有效的方法来做到这一点?另外,更重要的是,我在这里遇到运行时错误吗?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;
}
4

2 回答 2

4

您将“piegh”传递给 Reverse,它被转换为指向 char 的指针。指向 char 的指针指向只读字符串文字。也许您打算在尝试分配给它之前复制字符串文字“piegh”:

char fubar[] = "piegh";
string s = Reverse(fubar);

毕竟,你怎么能辩解"piegh"[0] = "peigh"[4];呢?

于 2013-03-08T01:33:50.257 回答
-1

这部分代码是做什么的? while(*end) ++end; //Assuming you are moving your pointer to hold the last character but not sure y --end;//y这个 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;
}
于 2013-03-08T01:45:33.137 回答