C++經典題目二:統計一篇英文文章中的單詞個數
阿新 • • 發佈:2019-02-18
要求:統計處一篇英文文章中的不同的單詞,並得到單詞個數。
用一個單向連結串列儲存所出現的單詞,注意幾點:1)檔案輸入輸出;2)字串處理;3)連結串列資料結構
再看程式碼——演算法實現如下:
//================================================================ // 讀入一篇英文文章,統計其中的單詞,並得到每個單詞出現的次數 // 連結串列的應用 //================================================================ #include "stdafx.h" #include "string.h" #include <malloc.h> typedef struct _link // 定義該連結串列是為了儲存不重複出現的單詞 { char* ch; int num; _link* next; }link; int _tmain(int argc, _TCHAR* argv[]) { // 讀入一個txt.檔案操作 FILE *fp; fp = fopen("test1.txt","r"); char word[1025]; int pos = 0; // 亦可用 size_t型別 char c; link *head, *pnow, *ptmp; head = pnow = ptmp = NULL; while (!feof(fp)) { c = fgetc(fp); //逐個獲取的字元 if ((c>='a'&&c<='z')||(c>='A'&&c<='Z')||(c=='\'')) word[pos++]=c; else if (pos>0) { word[pos] = '\0'; // 連結串列遍歷,比較連結串列中的節點值與當前單詞 ptmp = head; while (ptmp) { if (strcmp(word, ptmp->ch)==0) { ptmp->num++; break; } ptmp = ptmp->next; } // 如果連結串列中沒有當前單詞,在連結串列末尾插入節點 if (ptmp == NULL) { ptmp = (link*)malloc(sizeof(link)); //注意一下兩行的用法 ptmp->ch = (char*)malloc(pos); strcpy(ptmp->ch, word); ptmp->num=1; ptmp->next = NULL; if (pnow) // 插入當前節點為末節點 { pnow->next = ptmp; pnow = ptmp; } else // 此處為第一次出現單詞的時候 head = pnow = ptmp; } pos=0; } } fclose(fp); // 對檔案進行操作,關閉檔案 // 讀取連結串列,輸出單詞及其出現的個數 ptmp = head; FILE *fp1 = fopen("result.txt","w"); while (ptmp) { fprintf(fp1,"%d\t%s\n", ptmp->num, ptmp->ch); ptmp = ptmp->next; } fclose(fp1); return 0; }