1

助けが必要

これは私のコードです

void swapstringfun()
{
   int i=0,j=0;
   char *str=(char *)malloc(sizeof(char)*15);
   char *mystr=(char *)malloc(sizeof(char)*15);
   system("cls");
   printf("Please enter first string :\t");
   scanf("%s",str);
   printf("Please enter second string :\t");
   scanf("%s",mystr);
   while(*(str+i)!='\0' && *(mystr+i)!='\0')
   {
     *(str+i) ^=*(mystr+i);
     *(mystr+i) ^=*(str+i);
     *(str+i) ^=*(mystr+i);
     i++;
   }
   printf("%s swapped to %s",str,mystr);
   getch();
   main();
}

XOR演算子を使用して文字列を交換するために、上記のコードを記述しました。このコードの問題はです。私の入力が言うとき..RAJESHASHISH。次に、出力ASHISHRAJESHが表示されます。そして、それは期待されています。

しかし、入力を言うと.. ABHISHEKCODER 。そして、出力はCODERHEKABHISです。ただし、期待される出力はCODERABHISHEKです。誰かが私がこの問題を解決するのを手伝ってくれます。私は感謝します。

4

3 に答える 3

2

短い文字列の最後に到達するまで、繰り返して交換します

while(*(str+i)!='\0' && *(mystr+i)!='\0')

(または、長さが等しい場合は両方)。長い文字列の終わりに到達するまで繰り返すには、の||代わりに必要であり、 && 1。両方のポインタが十分な大きさのメモリブロックを指していること、および2.短い文字列が十分な0バイトで終わっていることを確認します。したがってcalloc、メモリではなく、メモリを使用する必要がありますmalloc

ただし、実際には、ポインタを交換する必要があります。

char *tmp = str;
str = mystr;
mystr = tmp;
于 2012-11-04T16:31:39.463 に答える
1

また、Cで文字列と呼ばれるものの一部として、終了する0を交換する必要があります。

0は、文字列を表す文字配列のストッパー要素です。

于 2012-11-04T16:32:00.070 に答える
0

両方の文字列の全長をXORする必要があります。2番目の例では、文字列の長さが異なるため、アルゴリズムは機能しません。

これはあなたが再考しなければならない声明です:

while(*(str+i)!='\0' && *(mystr+i)!='\0')
于 2012-11-04T16:33:11.217 に答える