一、程序概述

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程序的更多相关文章

  1. 在Pycharm上编写WordCount程序

    本篇博客将给大家介绍怎么在PyCharm上编写运行WordCount程序. 第一步 下载安装PyCharm 下载Pycharm PyCharm的下载地址(Linux版本).下载完成后你将得到一个名叫: ...

  2. 大数据之路week07--day03(Hadoop深入理解,JAVA代码编写WordCount程序,以及扩展升级)

    什么是MapReduce 你想数出一摞牌中有多少张黑桃.直观方式是一张一张检查并且数出有多少张是黑桃. MapReduce方法则是: 1.给在座的所有玩家中分配这摞牌 2.让每个玩家数自己手中的牌有几 ...

  3. indows Eclipse Scala编写WordCount程序

    Windows Eclipse Scala编写WordCount程序: 1)无需启动hadoop,因为我们用的是本地文件.先像原来一样,做一个普通的scala项目和Scala Object. 但这里一 ...

  4. 编写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 ...

  5. 020_自己编写的wordcount程序在hadoop上面运行,不使用插件hadoop-eclipse-plugin-1.2.1.jar

    1.Eclipse中无插件运行MP程序 1)在Eclipse中编写MapReduce程序 2)打包成jar包 3)使用FTP工具,上传jar到hadoop 集群环境 4)运行 2.具体步骤 说明:该程 ...

  6. 在IDEA中编写Spark的WordCount程序

    1:spark shell仅在测试和验证我们的程序时使用的较多,在生产环境中,通常会在IDE中编制程序,然后打成jar包,然后提交到集群,最常用的是创建一个Maven项目,利用Maven来管理jar包 ...

  7. Spark在Yarn上运行Wordcount程序

    前提条件 1.CDH安装spark服务 2.下载IntelliJ IDEA编写WorkCount程序 3.上传到spark集群执行 一.下载IntellJ IDEA编写Java程序 1.下载IDEA ...

  8. [转] 用SBT编译Spark的WordCount程序

    问题导读: 1.什么是sbt? 2.sbt项目环境如何建立? 3.如何使用sbt编译打包scala? [sbt介绍 sbt是一个代码编译工具,是scala界的mvn,可以编译scala,java等,需 ...

  9. Mapreduce概述和WordCount程序

    一.Mapreduce概述 Mapreduce是分布式程序编程框架,也是分布式计算框架,它简化了开发! Mapreduce将用户编写的业务逻辑代码和自带默认组合整合成一个完整的分布式运算程序,并发的运 ...

随机推荐

  1. rails 中http请求发生access-control-allow-origin错误

    在api项目中 本地项目无法访问服务器api 百度了下,查出原因 接着找到rails项目的解决方法,安装rack-cors这个gem包 具体方法如下: Gemfile中加入 gem 'rack-cor ...

  2. 从0开始学golang--1--部署本地服务器

    部署自己的本地服务器. 找了个三方包项目:beego.看了下还不错. 上代码....: 首先直接安装三方包,CMD下:go get github.com/astaxie/beego 安装成功后会在pk ...

  3. UWP Read write File -StorageFile

    // private void MainPage_Loaded(object sender, RoutedEventArgs e) { GetFileAsync(); } public async v ...

  4. JavaWeb总结(十三)

    Web开发模式的变迁 了解了Servlet和JSP,知道利用Servlet就可以开发一个Web应用程序,但是Servlet的缺陷使Web应用程序开发变得非常繁琐且不利于分工协作.使用JSP(表达式.声 ...

  5. maven 打 fatjar

    备忘. 1. <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> < ...

  6. 传统路由和OVS区别

    本文主要描述了一种将三层路由变成二层交换转发(以及二层转发变成三层路由)的实现方式,以应对OVS(OpenFlow)跨网段路由复杂的问题:当然技术本身是客观的,具体应用还要看场景. 随着SDN技术不断 ...

  7. 洛咕P3250 [HNOI2016]网络 整体二分

    这题太神仙了必须写博客... 显然可以想到二分答案.二分一个答案mid,如果所有长度\(\geq mid\)的路径都过x,那么答案一定\(<mid\),否则答案\(\geq mid\). 那么就 ...

  8. Unity扩展编辑器五

    扩展系统自带组件Inspector ​ 可以在系统摄像机组建上添加一个按钮,这样就可以单独处理逻辑了 ​

  9. 用Unity的UGUI实现简单摇杆

    1.在Canvas下新建一个空对象作为我们的摇杆,命名为Joystick. 摇杆由背景和杆两部分组成,所以在Joystick下新建一个Image作为摇杆的背景,命名为BG. 在BG下新建一个Image ...

  10. selenium 基本常用操作

    from selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChains #鼠标操作 ...