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,我有一个循环,我没有任何结果,我该怎么办?在 OpenVMS 上测试。谢谢你。

PS:我知道目前有很多错误,但我遇到了解决这个问题的问题。

4

1 回答 1

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

如果两个单词相同strcmp将返回0。这将交换这两个词,直到你的下一个电费账单进来并且你关闭你的程序。相反,检查结果是否大于零:

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

也可以看看:strcmp

于 2013-03-10T08:45:21.097 回答