按字母顺序排列一个二维数组

时间:2013-03-10 08:41:04

标签: c string multidimensional-array openvms

我正在使用字符串进行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:我知道目前有很多bug,但我有解决这个问题。

1 个答案:

答案 0 :(得分:4)

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

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

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

另请参阅:strcmp