编写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将用户编写的业务逻辑代码和自带默认组合整合成一个完整的分布式运算程序,并发的运 ...
随机推荐
- 针对铁定浏览器的css选择符
/***** Selector Hacks ******/ /* IE6 and below */ * html #uno { color: red } /* IE7 */ *:first-child ...
- JavaScript之字符串的常用操作函数
字符串的操作在js中非常繁琐,但也非常重要.在使用过程中,也会经常忘记,今天就对这个进行一下整理. String 对象 String 对象用于处理文本(字符串). new String(s); // ...
- 21-[jQuery]-介绍,引入方式,与js的区别
1.jQuery介绍 jQury官网:https://jquery.com/ 2.jQuery文件的引入 <!DOCTYPE html> <html lang="en&qu ...
- 有哪些 Bootstrap 的学习案例?
bootstrap经典实用案例 bootstrap经典实用案例(非常详细),从菜鸟到高手的过程是艰辛的,你渴望救助.这本教程就是你无言的助手,默默的帮你到永远. 带奋斗一起飞翔,因为有了它,让我拥有理 ...
- 自定义equals
@Overridepublic boolean equals(Object o) { if (o == null || getClass() != o.getClass()) { return fal ...
- 解决Linux下编译.sh文件报错 unexpected operator Syntax error: word unexpected
执行一个脚本 发现报语法错误,但是在其他机器上运行都没有问题 唯一的区别就是 一个是centos机器 报错的是ubuntu 网上搜索了一下 因为Ubuntu默认的sh是连接到dash的,又因为da ...
- 菜鸟vimer成长记——第4.2章、编程插件
简介 这部分的插件是与编程相关的插件.主要涉及两大块:所有编程语言通用的插件,以及各个语言独有的插件.插件的数量和合理性,这可能是一个不断累积和修正的过程. 个人感觉,现在比较适合sh,html,ma ...
- 十一、Django认证模块--Auth模块
一.常规认证方法 我们学生管理之登录实现一文中已经了解了自己写一个登录逻辑的过程: 1.url配置 urlpatterns = [ url(r'^login/$', views.login), url ...
- 2018年美国大学生数学建模竞赛(MCM/ICM) 比赛心得
话不多说,题目先上: 这是我们这次选择的题目,说说建模的那些事! 美赛的时间和国赛挑战杯时间略有不同,貌似多的一天是为了让我们对文章进行一个翻译吧QAQ 建议参加美赛的同学可以参照此计划进行 Day0 ...
- Android Studio —— java.lang.VerifyError: Verifier rejected class 问题解决
用as开发过程中遇见问题app闪退 log如下图: 解决: File—Settings: 点击Apply—OK重新运行即可