编写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将用户编写的业务逻辑代码和自带默认组合整合成一个完整的分布式运算程序,并发的运 ...
随机推荐
- 将CSV文件导入到hive数据库
将csv文件导入hive后出现了所有的字段只显示在新建的表的第一个字段中,后面的字段全是null. 出现这种的原因是hive以行分隔数据,需要修改为按逗号' , ‘ 进行分隔读取, 具体操作如下, ...
- 百度地图API和高德地图API资料集锦
[高德地图API]从零开始学高德JS API(五)路线规划——驾车|公交|步行 [高德地图API]从零开始学高德JS API(四)搜索服务——POI搜索|自动完成|输入提示|行政区域|交叉路口|自 ...
- 20155236范晨歌 Exp7 网络欺诈技术防范
20155236范晨歌 Exp7 网络欺诈技术防范 虚拟机经常崩= =,所以基本上做一个实验换一个... 遇到了一个简单的小问题老师帮忙解决了:虚拟机没联网... 一.基础问题回答 通常在什么场景下容 ...
- 《Java 程序设计》课堂实践项目-数据库
<Java 程序设计>课堂实践项目数据库 课后学习总结 目录 数据库实验要求 课堂实践成果 课后思考 由于担心做的不好,找同学询问了数据库的问题,学习了数据库的连通,补写的这篇博客.这是补 ...
- 20145234黄斐《Java程序设计》课程总结
每周作业链接汇总 预习作业一:http://www.cnblogs.com/taigenzhenjun/p/6492903.html 对专业的期望 预习作业二:http://www.cnblogs.c ...
- c++ 双向循环链表
教学内容: 循环双链表 建立循环双链表 循环链表里插入结点 遍历循环链表 双向链表结构定义 struct stu_data { ];//学生名字 struct mytime stuTime;/ ...
- 4515: [Sdoi2016]游戏
4515: [Sdoi2016]游戏 链接 分析: 树链剖分 + 超哥线段树.注意细节. 代码: #include<cstdio> #include<algorithm> #i ...
- 5249: [2018多省省队联测]IIIDX
5249: [2018多省省队联测]IIIDX 链接 分析: 贪心. 将给定的权值从大到小排序,从第一个往后挨个赋值,考虑第i个位置可以赋值那些树.首先满足前面必须至少有siz[i]个权值没选,如果存 ...
- [SCOI2010]传送带 三分法
[SCOI2010]传送带 LG传送门 三分法模板. 关于为什么可以三分,我选择感性理解,有人证明了,总之我是懒得证了. 假设路径是\(A \to E \to F \to D\),\(E\)和\(F\ ...
- P3592 [POI2015]MYJ
P3592 [POI2015]MYJ 一道比较烦的区间dp.. 昨天上课讲到了这题,然后就在lg翻到了 然后调了很久很久..... 设\(f[l][r][k]\)为区间\([l,r]\)中,最小值\( ...