文字檢索是軟體最常用的乙個功能,用c語言寫一段程式,統計某個檔案中單詞的個數。
文字檢索是軟體最常用的乙個功能,下面的**將教你如果使用c語言統計單詞的個數。
**實現:
#include**分析上面的程式,需要在 dos 命令列下執行。 首先 cd 到程式的編譯目錄,然後輸入程式名和檔名,例如,筆者編譯後的程式位於 e:\cdemo\debug\cdemo.exe,那麼執行方式如下:#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;
}
這裡需要簡單介紹一下 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...