一、需求分析:
统计程序中有的字符个数,行数以及单词数量。
思路设计:
通过对题目要求个人理解和同学的讨论,我认为通过对行,字符和词数分别用函数统计:
行数的统计我用了:int isrand(char c, int &randnum)。
对单词的统计我用了这个函数:int isWord(char c, int &wordnum)。单个字母和由多个字母组成的默认为都是单词。
对字符的统计运用了这个函数:int ischaracter(char c)。字符统计时两个单词之间的空格,括弧,等号等也算为一个字符了。
在主函数(main函数)中分别调用这三个函数可以简单的实现对字符、行数和单词的统计。
二、关键词的解释:
rand=0:初始化行数为零,rand含义为行数的统计。
word=0:初始化单词为零,word含义为单词的数量。
character=0:初始化字符数为零,character为字符的统计。
三、运行调试:
1.当输入所有源程序时运行结果和系统统计结果一样,行数为:63.单词为:111.字符总数为:905.
2.用简单的输入检测字符和单词的统计是否正确。
输入:c = getchar()
理论输出结果:
行数:1
单词输出:2
字符输出:13
运行截图:
3.在进行其他的几组数据的运行检验:
运行如图:
四、个人心得体会:
题目的基本要求不是太困难,就是对基础知识的要求很高。一开始想着将要检测的数据存储在文件里,但是折腾了整整半天在vs2013环境下无法将文件数据打开,但是在vc6.0中同样的代码可以运行,这要求我要积极去深入了解vs2013编译环境,不明白的一些问题在网上也有一些解释,需要自己去理解和消化。
编程中每一次要将自己的代码风格标准化,模仿别人的编程习惯,慢慢培养自己的习惯,要坚持。标准化自己函数的定义,既方便了自己将来的阅读,又为别人读懂自己的代码做了必要的工作。每一次编程都是对自己的一次锻炼。
源代码:
#include <stdio.h>
#include<Windows.h>
int isrand(char c, int &randnum)//判断是否换行
{
if (c == ‘\n‘)
{
randnum++;
if (randnum == 1)
return 1;
else
return 0;
}
else
{
if (randnum>0)
randnum = 0;
return 0;
}
}
int isWord(char c, int &wordnum)//判断是否单词
{
if ((c >= ‘a‘&&c <= ‘z‘) || (c >= ‘A‘&&c <= ‘Z‘))
{
wordnum++;
if (wordnum == 1)
return 1;
else
return 0;
}
else
{
if (wordnum>0)
wordnum = 0;
return 0;
}
}
int ischaracter(char c)//判断是否字符
{
if ((c<‘0‘ || c>‘9‘) && c != ‘\n‘)
return 1;
else
return 0;
}
int main()
{
system("color 9B");
int rand = 0, word = 0, character = 0;//初始化总行数 ,单词数 ,字符数
int randnum = 0, wordnum = 0;//randnum为行数 ,wordnum为次数
char c;
printf("请输入要检测的程序\n");
while (randnum<2)//如果不是空行则循环
{
c = getchar();
rand += isrand(c, randnum);
word += isWord(c, wordnum);
character += ischaracter(c);
}
printf("总行数:%d\n", rand);
printf("单词数:%d\n", word);
printf("字符数:%d", character);
system("pause");
return 0;
}