编写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将用户编写的业务逻辑代码和自带默认组合整合成一个完整的分布式运算程序,并发的运 ...
随机推荐
- MIPS架构——汇编代码转机器代码编译器 Matlab GUI
MIPS架构下的MCU,指令集包含R-Type.I-Type.J-Type三种,在数电课程设计时为了给MCU编写指令集,需要将汇编语言转化成机器代码,这里分享一下自己写的Matlab 的 GUI. 主 ...
- Vue 技巧
1.在 v-html 中执行 vue 绑定的事件,默认是不能执行的.这里需要把 html 重新解析一下 loadMsg:function(html){ html = $.parseHTML(html) ...
- 【转】QT事件传递与事件过滤器
[概览] 1.重载特定事件函数. 比如: mousePressEvent(),keyPressEvent(), paintEvent() . 2.重新实现QObject::ev ...
- 4710: [Jsoi2011]分特产
4710: [Jsoi2011]分特产 链接 分析: 容斥原理+隔板法. 代码: #include<cstdio> #include<algorithm> #include&l ...
- deque!
deque:双端队列 比较常用的函数: que.back() 返回容器que的最后一个元素的引用.如果que为空,则该操作未定义. que.begin() 传回迭代器中的第一个数据地址. que.cl ...
- Linux 挂载 xshell 命令 配置环境变量
- 一个导致MGR数据混乱Bug的分析和修复
1.背景 MGR是个好东西,因为他从本质上解决了数据不一致的问题.不光是解决了问题,而且出自名门正派(Oracle的MySQL团队),对品质和后续的维护,我们是可以期待的. 但是在调研的过程中,发现有 ...
- STM8S——watchdog(IWDG)
IWDG工作原理: 1.当键值寄存器(IWDG_KR)中写入数值0xCC后,独立看门狗就会被启动,计数器开始从它的复位值0xFF开始递减计数,当计数减到0x00时就会产生一个复位信号. 2.使用IWD ...
- 将禅道部署到腾讯云linux 上
部署环境 :linux(腾讯云),用到了 xshell FileZilla 使用禅道集成环境lampp直接部署 1.首先下载 lampp j集成环境包.https://sourceforge.ne ...
- 聊聊前段插件之Datatables
在web开发过程中表格数据展示是一个很常见的功能,而且用户对其要求也比较高,性能.易用性等.今天我推荐一款利器给大家——Datatables:Datatables中文网. 一.介绍 Datatable ...