您的位置:首页 > 其它

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;

}

总结:这个程序弄了两个多小时,觉得有一些东西值得学习,书上的做法比自己的更加缜密,不容易出错,可是一些地方也让我无法理解 如果大家有更好的解释 请多指教
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: