檢索單詞的個數

2021-08-02 11:19:15 字數 1685 閱讀 9906

文字檢索是軟體最常用的乙個功能,用c語言寫一段程式,統計某個檔案中單詞的個數。

文字檢索是軟體最常用的乙個功能,下面的**將教你如果使用c語言統計單詞的個數。

**實現:

#include

#include

#include

#include

// argc: 統計執行程式時命令列引數的個數

// *argv: 儲存每個引數的字串指標,每乙個元素對應乙個引數

intmain

(int argc,

char

*argv)

// 判斷能否成功開啟檔案

if((pt =

fopen

(argv[1],

"r"))== null)

printf

("請輸入要查詢的單詞:"

);gets

(find);

while

((ch=

getc

(pt))!=eof)

else

}printf

("共在檔案%s中查詢到字串

\"%s

\"%d 個\n"

,argv[

1],find,count);

getch

();return0;

}

**分析上面的程式,需要在 dos 命令列下執行。 首先 cd 到程式的編譯目錄,然後輸入程式名和檔名,例如,筆者編譯後的程式位於 e:\cdemo\debug\cdemo.exe,那麼執行方式如下:

這裡需要簡單介紹一下 main() 函式。main() 函式是程式的入口函式,**內部無法向其傳參,只能在程式執行時由系統在向其傳參。一般情況下不需要向main()函式傳參,但是如果希望程式啟動時可以讀取有用資料,進行初始化處理,那麼可以這樣來傳參:

int main (int argc, char *argv)

argc 表示引數的個數,argv 以陣列形式儲存傳遞的所有引數。

注意,當前程式會作為第乙個引數傳遞,例如上面輸入 cdemo.exe  demo.txt,那麼 argc =2,argc[0]=cdemo.exe,argc[1]=demo.txt

還有一種簡單的傳參方式,就是將檔案(圖示)拖到程式上,程式就會立即執行,並將該檔案作為乙個引數,效果與 cdemo.exe  demo.txt 相同。

關於main()函式的更多介紹請檢視:

c語言mian()函式詳解

最後說一下實現單詞搜尋的思路,這是本程式的關鍵,這部分**位於while迴圈內。

用gets讀取使用者輸入的單詞並儲存到變數find,while((ch=getc(pt))!=eof) 對檔案進行讀取,直到檔案結束。

用if對讀取的程序進行判斷:將每次讀取到的單個字元ch依次放入字串陣列temp中,直到遇到空格符或者換行符,則這個單詞結束,新增』\0』結束標記。用strcmp()函式與使用者搜尋的單詞find進行比較,如果匹配,則返回0,計數器count加1。最後令bian置0。

注意:英語書寫時以空格來分隔每個單詞,故我們以空格作為單詞結束的標誌。而之所以要加上換行符,是因為如果沒有檢測換行符,當單詞在行首(或行末)時,就會和上一行(或下一行)的最後乙個單詞連在一起,視為1個單詞與find比較,導致統計結果缺失。

單詞檢索程式

word.h標頭檔案 ifndef word h included define word h included include include include include include define list init size 500 線性表儲存空間的初始分配量 define listin...

單詞檢索 題解

呃 這題,真的不想說話。給出n個由小寫字母組成的字串,統計至少在m個字串中出現過的長度為l的字串數 n,m 2000,l i,l 1000 n m 2000,l i,l 1000 一看,就知道是雜湊 對於每個長度為l的串,都雜湊一下 還要記得o 1 o 1 推下乙個雜湊值,對於同乙個模板中出現多次的...

單詞的個數

從大神處學習的,主要關鍵是sscanf函式的乙個用法,就是遇到空格時,讀入結束。還有gets函式的乙個點,與scanf不同的是輸入字串是直到換行符時才結束,而scanf函式遇到空格時讀入就結束了。其中乙個思想是用二維陣列記錄一行字串,我覺得這個思想很好。include include using n...