promotion image of download ymail app
Promoted
匿名使用者
匿名使用者 發問時間: 電腦與網際網路程式設計 · 8 個月前

C語言單字排序問題?

取一個文字檔案 input.txt,將其內所有的英文單字,轉換成小寫後,排序,再輸出至output.txt。

已更新項目:

取一個文字檔案 input.txt,將其內所有的英文單字,轉換成小寫後,排序,再輸出至output.txt。

1.文字檔案中的所有英文單字皆為20個字元以內。

2.除以空白間隔單字外,並沒有其他標點符號。

3.轉換成小寫,需設計一副函式change()。

範例

input.txt

C is a general purpose imperative computer programming language supporting structured programming lexical variable scope and recursion while a static type system prevents many unintended operations

-

-

-

output.txt

a

a

and

and

application

applications

as

as

assembly

been

by

c

c

...

請程式大神幫個忙  沒什麼頭緒

2 個解答

評分
  • 8 個月前
    最佳解答

    #include<stdio.h>

    #include<ctype.h>

    #include<stdlib.h>

    char*FNAME="input.txt";

    char*ONAME="output.txt";

    size_t wCount(char*b){

    size_t wCnt;

    int inWord;

    for(inWord=0,wCnt=0;*b; ++b)

    if(isspace(*b)){

    wCnt += inWord;

    inWord = 0;

    } else {

    inWord = 1;

    }

    return wCnt + inWord;

    }

    void split(char*buf,char**w){

    char*b;

    int inWord, wCnt;

    for(b=buf, inWord=0, wCnt=0; *b; ++b)

    if(isspace(*b)){

    if(inWord) ++wCnt;

    *b = '\0';

    inWord = 0;

    } else {

    if(!inWord) w[wCnt] = b;

    inWord = 1;

    }

    wCnt += inWord;

    w[wCnt] = NULL;

    return;

    }

    char*getFile(char*fname,char*b){

    char*cp;

    FILE*f;

    for(f=fopen(fname,"r"),cp=b; EOF != (*cp = fgetc(f));++cp);

    fclose(f);

    *cp = '\0';

    return b;

    }

    void myChange(char*buf){

    char*b;

    for(b=buf;*b;++b) *b = tolower(*b);

    return;

    }

    int fSize(char*fname){

    FILE*f;

    int sz;

    for(f=fopen(fname,"r"), sz=0; EOF != fgetc(f) ; ++sz);

    fclose(f);

    return sz;

    }

    int cmp(char*s0, char*s1){

    for(;'\0' != *s0 && '\0' != *s1; ++s0, ++s1)

    if(*s0 != *s1) return *s0 > *s1 ? 1 : -1;

    if(*s0 == *s1) return 0;

    return *s0 ? 1 : -1;

    }

    void mySort(char**lst){

    char**p,**q;

    for(p=lst; *p; ++p)

    for(q=&p[1]; *q; ++q)

    if(0 < cmp(*p, *q)){

    char*t=*p;

    *p = *q;

    *q = t;

    }

    return;

    }

    int main(){

    FILE*oFile;

    size_t wCnt, bCnt;

    char**wList = NULL;

    char*buf = malloc(bCnt = (1+fSize(FNAME)));

    int i;

    buf = getFile(FNAME, buf);

    wCnt = wCount(buf);

    myChange(buf);

    wList = (char**)malloc(sizeof(*wList)*(1+wCnt));

    split(buf, wList);

    wList[wCnt] = NULL;

    mySort(wList);

    oFile = fopen(ONAME, "w");

    for(i=0; i<wCnt;++i) fprintf(oFile, "%s\n",wList[i]);

    fclose(oFile);

    free(wList);

    free(buf);

    return 0;

    }

    # please compare the same code written in Python below

    # !python

    FNAME = 'input.txt'

    ONAME = 'output.txt'

    #

    f = open(FNAME, 'r')

    lst = [w.lower() for line in f for w in line.strip().split()]

    f.close()

    f = open(ONAME, 'w')

    for w in sorted(lst): f.write('{}\n'.format(w))

    f.close()

    # end of python code.....

    #

    • Commenter avatar登入以對解答發表意見
  • 匿名使用者
    8 個月前

    例如,您仍然喜歡部落衝突,舉個例子嗎?

    • Commenter avatar登入以對解答發表意見
還有問題?馬上發問,尋求解答。