2

私はこのプログラムを持っています

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

int main()
{
    char text[30];
    int i,j,n;
    puts("Enter the Text:");
    gets(text);
    n=strlen(text);
    for(i=n;i>=0;i--)
    {
       if(text[i-1]==' '||text[i-1]==NULL )
       {
           for(j=i;text[j]!=' ';j++)
           {
               printf("%c",text[j]);
           }
       }

       printf(" ");


    }

    getche();
}

入力が「I am Happy」の場合、出力は「Happy am I」であるとします。

このプログラムのどこが間違っていたのかわかりません。すべての単語を取得できていません。「幸せ [=w am」という結果が得られています。プログラマーが私を助けてください。

前もって感謝します。

私は答えを見つけました、あなたの助けに感謝します、以下は私のコードです

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

int main()
{
    char text[100];
    int i,j;
    puts("Enter the Text:");
    gets(text);
    strrev(text);
    for(i=0;text[i]!='\0';i++)
    {
       if(text[i+1]==' ' || text[i+1]==NULL)
       {
           for(j=i;j>=0 && text[j]!=' ';j--)
            printf("%c",text[j]);
       }
       printf(" ");
    }
    getche();
}
4

4 に答える 4

4

基本的に、再帰を使用して実装された md5 のソリューション:

#include <stdio.h>
#include <string.h>

void print_upto_space(const char *s)
{
    do {
        putc(*s, stdout);
    } while (*s++ != ' ');
}

void reverse_print(const char *s)
{
    const char *p = strchr(s, ' ');
    if (p == NULL) { 
        printf("%s ", s);
    } else {
        reverse_print(p + 1);
        print_upto_space(s);
    }
}
于 2013-08-18T09:28:18.293 に答える
2

次のアルゴリズムを使用できます。

  1. 文字列を文字列の配列内の単語に分割します ( としましょうA)。
  2. A逆順で印刷します。

これはO(n)スペース内にありますが、おそらくこれはより簡単なアルゴリズムです (文字列の長さは 30 文字しかないので問題ありません)。

于 2013-08-18T09:22:24.077 に答える
1

これを試して文字列を逆にすることができます:-

void reverseWords( char * str )
{
    int i = 0, j = 0;
    reverseString( str, strlen(str) ); 
    while( 1 ) // Loop forever
    {
        if( *(str+j) == ' ' || *(str+j) == '\0') 
        {
            reverseString( str+i, j-i );
            i = j+1;
        }
        if( *(str+j) == '\0')
        {
            break;
        }
        j++;
    }
} 
void reverseString(char* str, int len)
{
    int i, j;
    char temp;
    i=j=temp=0;

    j=len-1;
    for (i=0; i<j; i++, j--)
    {
        temp=str[i];
        str[i]=str[j];
        str[j]=temp;
    }
}
于 2013-08-18T09:21:48.783 に答える
1

このソリューションでは、追加のメモリ バッファーは必要ありません。

まず、2 つのポインタを使用して、文字列全体を反転します。

次に、別の 2 つのポインターを使用して、文字列をたどり、各単語を反転します。

于 2013-08-18T09:26:15.703 に答える