wordcount程序算是相比于前幾次作業來說比較難得一個作業了。進行了一次真的自己編寫程序。WC程序實現了對txt文件中的數據的計數,算出程序中有多少單詞、字符數以及行數。這次的程序編程是采用的C語言進行編寫的,再編寫的時候還進行了將文件部分整體復習了一遍。回顧了一些已經生疏的東西。下面看一下程序代碼。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
#define IN 1
#define OUT 0
void main() {
FILE *fp;
int length;
fp = fopen("wang.txt", "r");//打開要計數的文件
if (fp == NULL)
{
printf("can not open file");
exit(0);
}
fseek(fp, 00, SEEK_END);
length = ftell(fp);
printf("%d\n", length);//確定所要查找的文件中總字符數長度,并在屏幕中顯示出來
rewind(fp);
char str[100000], c;
fread(str, sizeof(char), length, fp);//從文件中讀取所有的字符到str序列
int i, num1 = 0, num2 = 0, num3, num4=0, word = OUT;
for (i = 0; (c = str[i]) != '\0'; i++)
{
if (c == ' ')//判斷字符中單詞數
{
num2++;
word = OUT;
}
else
{
if (word == OUT)
{
word = IN;
num1++;
}
}
if ((c = str[i]) == '\n')
{
num4++;
}
}
num3 = length - num2-num4*2;//字符數
num4++;//行數
fclose(fp);
printf("空格數為%d\n", num2);
printf("單詞數為%d\n行數為%d\n字符數為%d\n", num1, num4, num3);
system("pause");
}
該程序中主要部分已經做了一些相關注釋。WC程序,該算法的程序流程大致是選定txt文件,然后讀取其中的字符數加入到其中的一個數組中;然后在數組中根據for循環進行行數,字符數,單詞數的計數。
字符轉移到數組主要分成兩個部分,第一部分先確定我們文件中的數據的長度,利用fseek函數判斷指針;第二部分利用數據長度把所有的字符一次性全部讀入到str數組中,利用fread函數
判斷行數利用的是for循環挨個進行字符的判斷,判斷數組中的\n個數,然后根據\n的個數確定行數,用num4表示
空格數的判斷也是利用for循環確定字符中共有多少個空格字符,用num2表示
單詞數的個數是利用兩個空格之間為一個單詞的算法來確定的,具體算法即for循環中第一個if語句,用num1表示
字符數的判斷則可利用總字符數,行數,還有空格數通過推導得出num3=length-num2-num4*2
程序已經介紹完了,下面具體演示一下成果吧。這里以wang.txt為例進行演示,共三組測試數據:
第一組
第二組:
第三組:
三組測試數據如上。
代碼部分已經上傳至coding上,coding上程序代碼為最初的原版,沒有添加注釋,博客中代碼為更新后的有注釋代碼。
文章列表