wordcount程序

    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 ", 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]) != ''; i++)
{
if (c == ' ')//判断字符中单词数
{
num2++;
word = OUT;
}
else
{
if (word == OUT)
{
word = IN;
num1++;
}
}
if ((c = str[i]) == ' ')
{
num4++;
}
}
num3 = length - num2-num4*2;//字符数
num4++;//行数
fclose(fp);
printf("空格数为%d ", num2);
printf("单词数为%d 行数为%d 字符数为%d ", num1, num4, num3);
system("pause");

}

该程序中主要部分已经做了一些相关注释。WC程序,该算法的程序流程大致是选定txt文件,然后读取其中的字符数加入到其中的一个数组中;然后在数组中根据for循环进行行数,字符数,单词数的计数。

字符转移到数组主要分成两个部分,第一部分先确定我们文件中的数据的长度,利用fseek函数判断指针;第二部分利用数据长度把所有的字符一次性全部读入到str数组中,利用fread函数

判断行数利用的是for循环挨个进行字符的判断,判断数组中的 个数,然后根据 的个数确定行数,用num4表示

空格数的判断也是利用for循环确定字符中共有多少个空格字符,用num2表示

单词数的个数是利用两个空格之间为一个单词的算法来确定的,具体算法即for循环中第一个if语句,用num1表示

字符数的判断则可利用总字符数,行数,还有空格数通过推导得出num3=length-num2-num4*2

程序已经介绍完了,下面具体演示一下成果吧。这里以wang.txt为例进行演示,共三组测试数据:

第一组

第二组:

第三组:

三组测试数据如上。

代码部分已经上传至coding上,coding上程序代码为最初的原版,没有添加注释,博客中代码为更新后的有注释代码。

原文地址:https://www.cnblogs.com/sunbuqiao/p/5312227.html