1

リターンエンドが正しくないことはわかっています。ポインタの1つを使用してエンドに移動し、文字列のサイズだけ戻って反転した文字列を返すことを考えています。それを行うためのより効率的な方法はありますか?また、さらに重要なことに、ここで実行時エラーが発生していますか?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;//これ 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 に答える