4.6 心得:统计字数程序
2013-04-06 12:57
176 查看
//统计字数,输入一段话,输出 单词个数,行数,字符数,不完整行数
//自己的做法:
/*#include<stdio.h>
#define STOP '|' //STOP代表输入停止,这样做程序更加清晰。
int main (void)
{
int letter=0; //字符数
int line=0;
//行数
int word=0;
//单词数
int partline=0;
//不完整行数
char iput,prev=' ';
//当前输入字符,前一个字符。
printf("please input some test to analysis('|'to terminate)\n");
while(STOP!=(iput=getchar()))
{
letter++;
//此时的输入字符为空格(换行符 制表符),且前一个字符为非空字符(换行符,制表符),则记为一个单词。
if(' '==iput && ' '!=prev )
word++;
if('\n'==iput)
line++;
prev=iput;
}
if('\n'!=prev)
partline=1; //STOP的前一个字符 如果是非换行字符的话,代表不完整的一行,
if(' '!=prev)
//多了这样一个判断
{
word++;
}
printf("letter=%d,word=%d,line=%d\n",letter,word,line);
printf("part-line=%d\n",partline);
return 0;
}
*/
//我的做法有漏洞,我是利用判断一个单词结束后的空格来使单词数累加,
//问题是:例如 当你输入 WW NN| 时,会只累加为1个单词数,而实际为两个,故在最后循环外要加一组判断。
//书中做法,利用bool类型来计单词数
#include<stdio.h>
#include<ctype.h> //isspace 参数为空白字符,返回为真
#define STOP '|' //STOP代表输入停止,这样做程序更加清晰。
int main (void)
{
int letter=0;
int line=0;
int word=0;
int partline=0;
char iput,prev;
bool initial=false; // initial 最初的,首字母
printf("please input some test to analysis('|'to terminate)\n");
while(STOP!=(iput=getchar()))
{
letter++;
if(!isspace(iput) && !initial) //理解:当前字符非空格,且上一个字符为空格
{
initial=true;
//true代表上一个字符为字母 false代表上一个为空格
word++;
}
if(isspace(iput)&& initial) //理解:当前为空格,上一个为字母 ps:我的想法去掉后面的initial 无影响
initial=false;
if('\n'==iput)
line++;
prev=iput;
}
if('\n'!=prev)
partline=1;
printf("letter=%d,word=%d,line=%d\n",letter,word,line);
printf("part-line=%d\n",partline);
return 0;
}
总结:这个程序弄了两个多小时,觉得有一些东西值得学习,书上的做法比自己的更加缜密,不容易出错,可是一些地方也让我无法理解 如果大家有更好的解释 请多指教
//自己的做法:
/*#include<stdio.h>
#define STOP '|' //STOP代表输入停止,这样做程序更加清晰。
int main (void)
{
int letter=0; //字符数
int line=0;
//行数
int word=0;
//单词数
int partline=0;
//不完整行数
char iput,prev=' ';
//当前输入字符,前一个字符。
printf("please input some test to analysis('|'to terminate)\n");
while(STOP!=(iput=getchar()))
{
letter++;
//此时的输入字符为空格(换行符 制表符),且前一个字符为非空字符(换行符,制表符),则记为一个单词。
if(' '==iput && ' '!=prev )
word++;
if('\n'==iput)
line++;
prev=iput;
}
if('\n'!=prev)
partline=1; //STOP的前一个字符 如果是非换行字符的话,代表不完整的一行,
if(' '!=prev)
//多了这样一个判断
{
word++;
}
printf("letter=%d,word=%d,line=%d\n",letter,word,line);
printf("part-line=%d\n",partline);
return 0;
}
*/
//我的做法有漏洞,我是利用判断一个单词结束后的空格来使单词数累加,
//问题是:例如 当你输入 WW NN| 时,会只累加为1个单词数,而实际为两个,故在最后循环外要加一组判断。
//书中做法,利用bool类型来计单词数
#include<stdio.h>
#include<ctype.h> //isspace 参数为空白字符,返回为真
#define STOP '|' //STOP代表输入停止,这样做程序更加清晰。
int main (void)
{
int letter=0;
int line=0;
int word=0;
int partline=0;
char iput,prev;
bool initial=false; // initial 最初的,首字母
printf("please input some test to analysis('|'to terminate)\n");
while(STOP!=(iput=getchar()))
{
letter++;
if(!isspace(iput) && !initial) //理解:当前字符非空格,且上一个字符为空格
{
initial=true;
//true代表上一个字符为字母 false代表上一个为空格
word++;
}
if(isspace(iput)&& initial) //理解:当前为空格,上一个为字母 ps:我的想法去掉后面的initial 无影响
initial=false;
if('\n'==iput)
line++;
prev=iput;
}
if('\n'!=prev)
partline=1;
printf("letter=%d,word=%d,line=%d\n",letter,word,line);
printf("part-line=%d\n",partline);
return 0;
}
总结:这个程序弄了两个多小时,觉得有一些东西值得学习,书上的做法比自己的更加缜密,不容易出错,可是一些地方也让我无法理解 如果大家有更好的解释 请多指教
相关文章推荐
- 利用Foundation框架写的小程序统计文件(文件夹内文件)的所有行数(或统计字数)
- 【软件工程】统计文章字数和出现频率较高词汇的程序实现
- 一个统计字数的程序
- 一个统计字数的程序
- (七)MapReduce字数统计程序
- 【分享】小程序表单字数统计、小程序计算textarea中字数(剩余字数)
- Hadoop自带字数统计程序wordcount异常
- 统计字数的小程序(1)
- android客户程序调用Webservice 心得
- tcpreplay(3.4版本)程序显示统计结果的一个问题
- JavaScript中统计Textarea字数并提示还能输入的字符
- 关于dos窗口下运行java程序,中文字符打印成乱码的心得总结
- OPENXML获取DOCX中的页数和字数统计
- 程序 c/c++、Java编写一个统计小程序
- 在vs2008 C++下调试控制台程序的心得及技巧
- SharpDevelop解析与学习心得之二------重要概念及核心程序的启动
- 统计Java程序代码行数(Java)
- Lua的使用心得: 数据定义和过程定义(Lua在程序中的数据定义和过程定义的界定原则的研究)
- 字数统计
- 【程序17】输入一行字符,分别统计其中英文字母、空格、数字和其它字符的个数