编写wordcount程序
一、程序概述
1、此次编写的程序为邹欣老师《构建之法》科书2.4.2 wordcount程序。
2、我写的wordcount程序要实现的功能整体可以总结为:
① 统计word文档中的字符数、单词数;
② 统计word文档中的符号数,即除了数字和字母以外的符号,像标点符号,括号等;
③ 统计行数并且输出每一行的类别,即是代码行还是注释行;
④ 程序有界面、选择功能和返回退出功能。
3、编程工具:VC++ 6.0;
编程语言:C/C++。
二、程序执行及调试
1、运行程序,需要输入所要统计文本文档的文件名,我建立了一个word文档,里面存储的也正好为本次的代码。


2、进入菜单界面,如图所示,菜单界面有5个选项,分别为显示字符数、单词数和行数,显示符号数,显示行数及行分类 ,显示所有和退出5个选项。

3、输入1,选择“显示字符数、单词数和行数”选项,则进行统计字符数、单词数和行数并输出显示。

4、选择2,“显示符号数”,进行符号数统计并显示。

5、选择3,“显示行数及行分类”统计并显示行数及分类,一共到178行,因为太多,就不一一展示了。

如图,其中第10行和第28行为注释行,程序显示“注释行”,没有出现问题。

6、选择4,“显示全部”,就会把所有信息全部显示出来。

7、选择5,退出,则退出程序。

三、总结
在此次程序中,因为要求界面的整洁,所以我是用了代码system("cls")进行清屏操作,不然会一直执行下去,满屏幕的菜单和数据混在一起不美观,数据也容易丢失,所以每次用完一个功能,记录下数据,就会执行system("cls")代码进行清屏,执行下一项功能,记录下一个数据。
其次我运用了文件操作C中的fseek(file,-1L,SEEK_CUR)代码,因为在一个字符一个字符的查找时,有时会查找过,但还要继续使用前一个字符,这时候就需要使用文件指针的操作fseek(file,-1L,SEEK_CUR),使文件指针向前移动,从而可以继续使用前一个字符。
此次程序主要锻炼我的文件操作,发现了很多自身的不足,例如不会运用C++的文件操作,其实C++的文件操作很简单,只不过类型较多,而此次只运用了读操作,所以我只用了C的文件操作,但是C++的文件操作必须要掌握,我会继续学习,完善自己!
四、源代码
#include "iostream"
#include "string"
#include "stdio.h" using namespace std; FILE *file;
int chars=,words=,lines=,symbols=,s[];
char c;
//定义全局变量 void index()
{
cout<<" ********************主菜单*********************"<<endl;
cout<<" * *"<<endl;
cout<<" * 1、显示字符数、单词数和行数 *"<<endl;
cout<<" * *"<<endl;
cout<<" * 2、显示符号数 *"<<endl;
cout<<" * *"<<endl;
cout<<" * 3、显示行数及行分类 *"<<endl;
cout<<" * *"<<endl;
cout<<" * 4、显示所有 *"<<endl;
cout<<" * *"<<endl;
cout<<" * 5、退出 *"<<endl;
cout<<" * *"<<endl;
cout<<" ***********************************************"<<endl;
cout<<" * 请选择需要的功能:";
}//主菜单函数 void analyse()
{
while((c=fgetc(file))!=EOF)
{
chars++;
if (((c<='z')&&(c>='a'))||((c<='Z')&&(c>='A'))||((c>='')&&(c<='')))
{
words++;
while((c=fgetc(file))!=EOF)
{
chars++;
if (((c<='z')&&(c>='a'))||((c<='Z')&&(c>='A'))||((c>='')&&(c<='')))
{
}
else if (c=='\n')
{
s[lines]=;
lines++;
break;
}
else if (c==' ')
break;
else
{
symbols++;
break;
}
}
}
else if (c=='/')
{
if ((c=fgetc(file))=='/')
{
symbols+=;
s[lines]=;
fseek(file,-1L,SEEK_CUR);
}
}
else if (c=='\n')
{
if (s[lines]!=)
s[lines]=;
lines++;
}
else if (c==' ')
{
}
else
symbols++;
}
if (s[lines]!=)
s[lines]=;
}//分析所有字符数、单词数、行数及行类的函数 int main ()
{
char name[],b;
int a,i,j;
cout<<" * 请输入源文件名:";
for(;;)
{
cin>>name;
if((file=fopen(name,"r"))!=NULL)
break;
else
cout<<" * 文件路径错误!请重新输入源文件名:";
}
analyse();
fclose(file);
index();
cin>>a;
while (a!=)
{
switch (a)
{
case :cout<<" * 字符数:"<<chars<<endl;
cout<<" * 单词数:"<<words<<endl;
cout<<" * 行数 :"<<lines<<endl;
cout<<" * 按任意键返回:";
b=getchar();
b=getchar();
break;
case :cout<<" * 符号数:"<<symbols<<endl;
cout<<" * 按任意键返回:";
b=getchar();
b=getchar();
break;
case :cout<<" * 行数:"<<lines<<endl;
for (i=;i<=lines;i++)
{
if (s[i]==)
{
if (i<)
cout<<" * 第"<<i<<"行为 代码行"<<endl;
else if (i<)
cout<<" * 第"<<i<<"行为 代码行"<<endl;
else
cout<<" * 第"<<i<<"行为 代码行"<<endl;
}
else if (s[i]==)
{
if (i<)
cout<<" * 第"<<i<<"行为 注释行"<<endl;
else if (i<)
cout<<" * 第"<<i<<"行为 注释行"<<endl;
else
cout<<" * 第"<<i<<"行为 注释行"<<endl;
}
}
cout<<" * 按任意键返回:";
b=getchar();
b=getchar();
break;
case :cout<<" * 字符数:"<<chars<<endl;
cout<<" * 单词数:"<<words<<endl;
cout<<" * 符号数:"<<symbols<<endl;
cout<<" * 行数 :"<<lines<<endl;
for (j=;j<=lines;j++)
{
if (s[j]==)
{
if (j<)
cout<<" * 第"<<j<<"行为 代码行"<<endl;
else if (j<)
cout<<" * 第"<<j<<"行为 代码行"<<endl;
else
cout<<" * 第"<<j<<"行为 代码行"<<endl;
}
else if (s[j]==)
{
if (j<)
cout<<" * 第"<<j<<"行为 注释行"<<endl;
else if (j<)
cout<<" * 第"<<j<<"行为 注释行"<<endl;
else
cout<<" * 第"<<j<<"行为 注释行"<<endl;
}
}
cout<<" * 按任意键返回:";
b=getchar();
b=getchar();
break;
}
system("cls");
index();
cin>>a;
}
return ;
}//主函数
编写wordcount程序的更多相关文章
- 在Pycharm上编写WordCount程序
本篇博客将给大家介绍怎么在PyCharm上编写运行WordCount程序. 第一步 下载安装PyCharm 下载Pycharm PyCharm的下载地址(Linux版本).下载完成后你将得到一个名叫: ...
- 大数据之路week07--day03(Hadoop深入理解,JAVA代码编写WordCount程序,以及扩展升级)
什么是MapReduce 你想数出一摞牌中有多少张黑桃.直观方式是一张一张检查并且数出有多少张是黑桃. MapReduce方法则是: 1.给在座的所有玩家中分配这摞牌 2.让每个玩家数自己手中的牌有几 ...
- indows Eclipse Scala编写WordCount程序
Windows Eclipse Scala编写WordCount程序: 1)无需启动hadoop,因为我们用的是本地文件.先像原来一样,做一个普通的scala项目和Scala Object. 但这里一 ...
- 编写Spark的WordCount程序并提交到集群运行[含scala和java两个版本]
编写Spark的WordCount程序并提交到集群运行[含scala和java两个版本] 1. 开发环境 Jdk 1.7.0_72 Maven 3.2.1 Scala 2.10.6 Spark 1.6 ...
- 020_自己编写的wordcount程序在hadoop上面运行,不使用插件hadoop-eclipse-plugin-1.2.1.jar
1.Eclipse中无插件运行MP程序 1)在Eclipse中编写MapReduce程序 2)打包成jar包 3)使用FTP工具,上传jar到hadoop 集群环境 4)运行 2.具体步骤 说明:该程 ...
- 在IDEA中编写Spark的WordCount程序
1:spark shell仅在测试和验证我们的程序时使用的较多,在生产环境中,通常会在IDE中编制程序,然后打成jar包,然后提交到集群,最常用的是创建一个Maven项目,利用Maven来管理jar包 ...
- Spark在Yarn上运行Wordcount程序
前提条件 1.CDH安装spark服务 2.下载IntelliJ IDEA编写WorkCount程序 3.上传到spark集群执行 一.下载IntellJ IDEA编写Java程序 1.下载IDEA ...
- [转] 用SBT编译Spark的WordCount程序
问题导读: 1.什么是sbt? 2.sbt项目环境如何建立? 3.如何使用sbt编译打包scala? [sbt介绍 sbt是一个代码编译工具,是scala界的mvn,可以编译scala,java等,需 ...
- Mapreduce概述和WordCount程序
一.Mapreduce概述 Mapreduce是分布式程序编程框架,也是分布式计算框架,它简化了开发! Mapreduce将用户编写的业务逻辑代码和自带默认组合整合成一个完整的分布式运算程序,并发的运 ...
随机推荐
- WP10的一点小问题
兼容WP8.0/WP7.5不太完整!也许是测试版的问题.毕竟还没发布正式版! 具体如:WP8.0或WP7.5的启动器!就是选择图片的启动器!调用后对话框返回的结果都是Cancel本来应该是OK的.也就 ...
- Oracle单节点_Grid_Infrastructure_DB_安装过程图解(一/三)
首先进行各种准备: ASMLIB的准备,用户和目录的创建. 安装好Linux之后(采用了OEL 5.7),查看是否光盘中包含ASMLIB:
- jQuery学习-设置访问元素样式
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- BZOJ2539 Spoj 10707 Count on a tree II
题面 题解 因为这道题目我也不太会做,所以借鉴了一下大佬heyujun的博客 如果不强制在线,这道题目是树上莫队练手题 我们知道莫队是离线的,但是万一强制在线就凉凉了 于是我们就需要一些操作:树分块 ...
- 排序算法:快速排序解析及Python实现
关键词:分而治之.递归.计算速度.基准值 1. 什么是分而治之? 1.1 分而治之(divide and conquer)一种递归式方法 1.2 找出基线条件,这种条件必须尽可能简单 1.3 不断将问 ...
- .net core的定时任务框架Timed Job
参考文档:http://www.1234.sh/post/pomelo-extensions-timed-jobs 在该文档中介绍了怎么使用timed job,但是在使用db的时候会发生错误,错误一般 ...
- 【总结】详细说说Html.ActionLink的用法
Html.ActionLink概述 在MVC的Rasor视图引擎中,微软采用一种全新的方式来表示从前的超链接方式,它代替了从前的繁杂的超链接标签,让代码看起来更加简洁,通过浏览器依然会解析成传统的a标 ...
- idou老师教你学Istio:如何用 Istio 实现速率限制
使用 Istio 可以很方便地实现速率限制.本文介绍了速率限制的使用场景,使用 memquota\redisquota adapter 实现速率限制的方法,通过配置 rule 实现有条件的速率限制,以 ...
- svn图文教程-宋正河整理
下载地址:http://download.csdn.net/download/songzhengdong82/4433476 在线浏览:http://wenku.baidu.com/view/07f1 ...
- 我的第一个bootstrap实例
先上代码: <!doctype html><html lang="en"><head> <meta charset="UTF-8 ...