0

文字列を使用して C で演習を行っています。テキストに含まれるいくつかの単語を注文する必要があります。

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

main(){
        int cch=0, cw=0, i, j, w=0, ord=0, f=0; //counter and index
        char testo[80];
        char alfa[50][25];
        char swap[25];

        printf("Write the test:\n");
        gets(testo);

        if(testo[0]!='\0'){
                cw=1;   
                for(i=0;testo[i]!='\0';i++){
                        cch++;
                        if(testo[i]==' '){
                                cw++;
                        }
                }
        }

        for(i=0;i<cch;i++){
                if(testo[i]==' ' && testo[i+1]==' '){
                        cw--;
                }
        }

        if(testo[0]==' '){
                cw--;
                w--;
        }

        printf("\nIn the test there are %d characters\n", cch);
        printf("In the test there are %d words\n", cw);

        if(cw>0){
                printf("\nUsed words:\n");
                for(j=0;j<cch;j++){
                        if(testo[j]==' ' && testo[j+1]==' '){
                                //nothing to do       
                        }
                        else{
                                if(testo[j]!=' '){
                                        alfa[w][f]=testo[j];
                                        f++;
                                }
                                else if(testo[j]=='\0'){
                                        alfa[w][f]='\0';
                                        f=0;
                                        w=0;
                                }
                                else{
                                        alfa[w][f]='\0';
                                        w++;
                                        f=0;
                                }
                        }
                }

                for(i=0;i<cw;i++){
                        printf("%d> %s\n", i+1, &alfa[i]);
                }

                //order
                f=1;
                printf("\nWord used in alphabetical order:\n");
                while(f==1){
                        f=0;
                        for(i=0;i<cw-1;i++){
                                ord=strcmp(alfa[i],alfa[i+1]);
                                if(ord>-1){
                                        strcpy(swap,alfa[i]);
                                        strcpy(alfa[i],alfa[i+1]);
                                        strcpy(alfa[i+1],swap);
                                        f=1;
                                }       
                        }
                }

                for(i=0;i<cw;i++){
                        printf("%d> %s\n", i+1, alfa[i]);
                }
        }
        else{
                printf("You haven't written any word.\n");
        }
}

問題は、同じ単語が 2 つあり、その単語が 2 つ以上ある場合、ループが発生し、結果が得られないことです。どうすればよいでしょうか? OpenVMS でテスト済み。ありがとうございました。

PS: 現時点で多くのバグがあることはわかっていますが、これを解決するには問題があります。

4

1 に答える 1

4
if(ord>-1){
    /* ... */
} 

両方の単語が同じ場合は、strcmpが返され0ます。これにより、次の電力請求書が届き、プログラムをシャットダウンするまで、両方の単語が入れ替わります。代わりに、結果がゼロより大きいかどうかを確認します。

if(ord > 0){
    /* ... */
}

以下も参照してください。strcmp

于 2013-03-10T08:45:21.097 に答える