5

文字列を逆にするプログラムを書きました..しかし、それは機能していません..スキャンされた同じ文字列を印刷しています..コードの問題は何ですか?

#include <stdio.h>
#include <stdlib.h>
char *strrev(char *s)
{
        char *temp = s;
        char *result = s;
        char t;
        int l = 0, i;
        while (*temp) {
                l++;
                temp++;
        }
        temp--;
        for (i = 0; i < l; i++) {
                t = *temp;
                *temp = *s;
                *s = t;
                s++;
                temp--;
        }
        return result;
}

int main()
{
        char *str;
        str = malloc(50);
        printf("Enter a string: ");
        scanf("%s", str);
        printf("%s\n\n", strrev(str));
        return 0;
}
4

8 に答える 8

15
for (i = 0; i < l; i++)

弦全体を歩いているので、2 回反転していることになります。結局、反転することはありません。半分だけ歩く:

for (i = 0; i < l / 2; i++)

また、int len = strlen()許可されている場合は、while-not-end-of-string ループの代わりに使用してみてください。

于 2013-01-04T06:39:27.717 に答える
4

文字列の内容を 2 回交換します。

于 2013-01-04T06:38:51.853 に答える
2

次のコードを使用してください..

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>

char *strrev(char *s)
{
     char *temp = s;
     char *result = s;
     char t;
     while (*temp)
          temp++;

     while (--temp != s)
     {
            t = *temp;
            *temp = *s;
            *s++ = t;
     }
     return result;
 }

 int main()
 {
      char *str;
      str = (char*)malloc(50);
      printf("Enter a string: ");
      scanf("%s", str);
      printf("%s\n\n", strrev(str));
      return 0;
  }
于 2013-01-04T10:34:03.070 に答える
1

ロジックは、開始から前半までの文字を後半の後半からの文字、つまりlen/2まで交換することです。以下のようにforループを変更するだけで、for(i = 0; i <l / 2; i ++){

于 2013-01-04T06:57:49.893 に答える
1
you can use this code to reverse the string
#include<stdio.h>
#include<string.h>
int main()
{
    int n,i;
    char str2[100],str1[100];
    printf("enter teh string 1\n");
    gets(str1);
    n = strlen(str1);
    for(i=0;i<n;i++)
    {
    str2[n-1-i]=str1[i];
    }
    printf("%s\n",str2);

}
于 2015-05-28T08:38:34.280 に答える
0

文字列の内容を2回交換します。

一度交換すると役に立ちます。

for (i = 0; i < l/2; i++)
于 2013-01-18T09:57:49.817 に答える
0

実際には、文字列を2回逆にしています...したがって、文字列の中央に来た後、ループを終了する必要があります。ループは、文字列の長さの半分、つまりl/2(この場合)実行する必要があります。だからあなたのループは次のようになるはずです

for(i = 0; i < i / 2; i++)
于 2013-01-04T07:08:20.533 に答える