编写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++的文件操作必须要掌握,我会继续学习,完善自己!

 

四、源代码

  1 #include "iostream"
  2 #include "string"
  3 #include "stdio.h"
  4 
  5 using namespace std;
  6 
  7 FILE *file;
  8 int chars=0,words=0,lines=1,symbols=0,s[500];
  9 char c;
 10 //定义全局变量
 11 
 12 void index()
 13 {
 14     cout<<"                ********************主菜单*********************"<<endl;
 15     cout<<"                *                                          *"<<endl;
 16     cout<<"                *         1、显示字符数、单词数和行数      *"<<endl;
 17     cout<<"                *                                          *"<<endl;
 18     cout<<"                *         2、显示符号数                    *"<<endl;
 19     cout<<"                *                                          *"<<endl;
 20     cout<<"                *         3、显示行数及行分类              *"<<endl;
 21     cout<<"                *                                          *"<<endl;
 22     cout<<"                *         4、显示所有                      *"<<endl;
 23     cout<<"                *                                          *"<<endl;
 24     cout<<"                *         5、退出                           *"<<endl;
 25     cout<<"                *                                          *"<<endl;
 26     cout<<"                ***********************************************"<<endl;
 27     cout<<"                * 请选择需要的功能:";
 28 }//主菜单函数
 29 
 30 void analyse()
 31 {
 32     while((c=fgetc(file))!=EOF) 
 33     {
 34         chars++;
 35         if (((c<='z')&&(c>='a'))||((c<='Z')&&(c>='A'))||((c>='0')&&(c<='9')))
 36         {
 37             words++;
 38             while((c=fgetc(file))!=EOF)
 39             {    
 40                 chars++;
 41                 if (((c<='z')&&(c>='a'))||((c<='Z')&&(c>='A'))||((c>='0')&&(c<='9')))
 42                 {
 43                 }
 44                 else if (c=='\n')
 45                 {
 46                     s[lines]=1;
 47                     lines++;
 48                     break;
 49                 }
 50                 else if (c==' ')
 51                     break;
 52                 else
 53                 {
 54                     symbols++;
 55                     break;
 56                 }
 57             }
 58         }
 59         else if (c=='/')
 60         {
 61             if ((c=fgetc(file))=='/')
 62             {
 63                 symbols+=2;
 64                 s[lines]=2;
 65                 fseek(file,-1L,SEEK_CUR);
 66             }
 67         }
 68         else if (c=='\n')
 69         {
 70             if (s[lines]!=2)
 71                 s[lines]=1;
 72             lines++;    
 73         }
 74         else if (c==' ')
 75         {
 76         }
 77         else
 78             symbols++;
 79     }
 80     if (s[lines]!=2)
 81         s[lines]=1;
 82 }//分析所有字符数、单词数、行数及行类的函数
 83 
 84 int main ()
 85 {
 86     char name[30],b;
 87     int a,i,j;
 88     cout<<"                * 请输入源文件名:";
 89     for(;;)
 90     {
 91         cin>>name;
 92         if((file=fopen(name,"r"))!=NULL) 
 93             break;
 94         else 
 95             cout<<"                * 文件路径错误!请重新输入源文件名:";
 96     }
 97     analyse();
 98     fclose(file);
 99     index();
100     cin>>a;
101     while (a!=5)
102     {
103         switch (a)
104         {
105             case 1:cout<<"                * 字符数:"<<chars<<endl;
106                    cout<<"                * 单词数:"<<words<<endl;
107                    cout<<"                * 行数  :"<<lines<<endl;
108                    cout<<"                * 按任意键返回:";
109                    b=getchar();
110                    b=getchar();
111                    break;
112             case 2:cout<<"                * 符号数:"<<symbols<<endl;
113                    cout<<"                * 按任意键返回:";
114                    b=getchar();
115                    b=getchar();
116                    break;
117             case 3:cout<<"                * 行数:"<<lines<<endl;
118                    for (i=1;i<=lines;i++)
119                    {
120                        if (s[i]==1)
121                        {
122                            if (i<10)
123                                cout<<"                * 第"<<i<<"行为   代码行"<<endl;
124                            else if (i<100)
125                                cout<<"                * 第"<<i<<"行为  代码行"<<endl;
126                            else
127                                cout<<"                * 第"<<i<<"行为 代码行"<<endl;
128                        }
129                        else if (s[i]==2)
130                        {
131                            if (i<10) 
132                                cout<<"                * 第"<<i<<"行为   注释行"<<endl;
133                            else if (i<100)
134                                cout<<"                * 第"<<i<<"行为  注释行"<<endl;
135                            else
136                                cout<<"                * 第"<<i<<"行为 注释行"<<endl;
137                        }
138                    }
139                    cout<<"                * 按任意键返回:";
140                    b=getchar();
141                    b=getchar();
142                    break;
143             case 4:cout<<"                * 字符数:"<<chars<<endl;
144                    cout<<"                * 单词数:"<<words<<endl;
145                    cout<<"                * 符号数:"<<symbols<<endl;
146                    cout<<"                * 行数  :"<<lines<<endl;
147                    for (j=1;j<=lines;j++)
148                    {
149                        if (s[j]==1)
150                        {
151                            if (j<10)
152                                cout<<"                * 第"<<j<<"行为   代码行"<<endl;
153                            else if (j<100)
154                                cout<<"                * 第"<<j<<"行为  代码行"<<endl;
155                            else
156                                cout<<"                * 第"<<j<<"行为 代码行"<<endl;
157                        }
158                        else if (s[j]==2)
159                        {
160                            if (j<10)
161                                cout<<"                * 第"<<j<<"行为   注释行"<<endl;
162                            else if (j<100)
163                                cout<<"                * 第"<<j<<"行为  注释行"<<endl;
164                            else
165                                cout<<"                * 第"<<j<<"行为 注释行"<<endl;
166                        }
167                    }
168                    cout<<"                * 按任意键返回:";
169                    b=getchar();
170                    b=getchar();
171                    break;
172         }
173         system("cls");
174         index();
175         cin>>a;
176     }
177     return 0;
178 }//主函数

 

 

转载于:https://www.cnblogs.com/hgcrown/p/5311155.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Wordcount程序是一种常见的文本处理程序,用于计算一段文本中单词的出现频率。下面是分析和编写Wordcount程序的步骤: 1. 读取文本文件 首先,我们需要读取待处理的文本文件。这可以通过Python的内置函数`open()`和`read()`来实现。`open()`函数用于打开文件,`read()`函数用于读取文件内容。 2. 分割单词 读取文本文件后,我们需要将文本文件中的内容分割成单词。这可以通过Python的内置函数`split()`来实现。`split()`函数会将文本字符串分割成一个单词列表。 3. 统计单词出现的频率 接下来,我们需要统计每个单词在文本中出现的频率。这可以通过Python的字典数据结构来实现。我们可以遍历单词列表,对于每个单词,将其作为字典的键,如果单词已经出现过,则将其对应的值加一,否则将其添加到字典中,初始值为1。 4. 输出单词频率 最后,我们需要将统计结果输出。这可以通过遍历字典,将每个键值对输出到屏幕或写入到文件中来实现。 下面是一个示例代码: ```python # 读取文本文件 with open('text.txt', 'r') as f: text = f.read() # 分割单词 words = text.split() # 统计单词出现的频率 word_freq = {} for word in words: if word in word_freq: word_freq[word] += 1 else: word_freq[word] = 1 # 输出单词频率 for word, freq in word_freq.items(): print(word, freq) ``` 当然,这只是一个简单的示例程序,实际的Wordcount程序可能还需要考虑一些其他的问题,例如去除标点符号和停用词等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值