C Primer Plus程序清单7.7中inword判读字符是否在单词中问题求大神帮助

Mr丶纪 2014-12-09 07:37:07
我是个新手,零基础,最近在自学C Primer Plus,遇到关于使用inword判断字符是否在单词中的问题理解不透

程序清单7.7
// wordcnt.c -- 统计字符、单词和行
#include<stdio.h>
#include<ctype.h>
#include<stdbool.h>
#define STOP '|'
int main(void)
{
char c; //读入字符
char prev; //前一个读入字符
int n_chars=0L; //字符数
int n_lines=0; //行数
int n_words=0; //单词数
int p_lines=0; //不完整的行数
bool inword=false;//如果c 在一个单词中,则inword等于true

printf("Enter text to be analyzed(| to terminate):\n");
prev='\n'; //用于识别完整的行
while((c=getchar())!=STOP)
{
n_chars++;
if(c=='\n')
n_lines++; //统计行
if(!isspace(c)&&!inword)
{
inword=true//开始一个新单词
n_words++;
}
if(isspace(c)&&inword)
inword=false;//到达单词的尾部
prev=c; //保存字符数
}

if(prev!='\n')
p_lines=1;
printf("characters=%ld,words=%d,lines=%d.",n_chars,n_words,p_lines);
printf("partial lines=%d\n",p_lines);
return 0;
}

1.bool inword=false;//如果c 在一个单词中,则inword等于true
这个赋值无法理解,inword怎么判断的字符是不是在一个单词中呢?
比如 isspace(c),如果c是空字符结果为真反之为假,这种书中讲到过的有明确定义的我能理解,inword怎么实现判断的呢?
2.书中说inword定义为标志,在百度上有人说这是标志变量,不懂这是什么意思,一直在看书,只看到有标识符,有系统保留关键字,标志是个什么概 念呢?怎么在书上没有学到?找了书中所有章节也没有关于这种概念的解释,求大神帮助。
各位大神们是我需要学习哪些知识才能掌握类似inword这种概念及用法?书中怎么没有?
...全文
877 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
闵波路三舅 2018-10-02
  • 打赏
  • 举报
回复
我也卡在这里了,为啥!inword==false?而不是true
qq_37902300 2017-07-31
  • 打赏
  • 举报
回复
楼主
bool inword = false;
为什么inword取假
但是下面
if (!isspace (c) && !inword)
书上又说这句表示“如果c不是空白字符,并且如果C不处于一个单词里”?inword不是去假吗上面, !inword不应该是真吗
parade岁月 2017-06-13
  • 打赏
  • 举报
回复
你好,看你这篇帖子已经很早了,因为我最近才看《c primer plus》这本书,所以就有缘看到了这个帖子。你说的这个问题我也思考了好久,不过还好弄明白了。因为我也是零基础学习c语言,不知道您现在学的怎么样了,完全都是自学吗
赵4老师 2014-12-11
  • 打赏
  • 举报
回复 1
参考《编译原理》中的词法分析和有限状态自动机。
linxin3333520 2014-12-11
  • 打赏
  • 举报
回复 1
至于标志,那简单,要是空格if(isspace(c)&&inword),就把bool变量设为假,表示一个单词结束;接着判断,如果不是空格(是字符),if(!isspace(c)&&!inword),就重新设为真,这时单词数加1,例如输入abc+空格,这时表示单词数为1,输入abc+空格+cdf+空格,单词数为2,一直这样下去。
linxin3333520 2014-12-11
  • 打赏
  • 举报
回复
while((c=getchar())!=STOP) { n_chars++; if(c=='\n') n_lines++; //统计行 if(!isspace(c)&&!inword) { inword=true//开始一个新单词 n_words++; } if(isspace(c)&&inword) inword=false;//到达单词的尾部 prev=c; //保存字符数 } 这一部分只是逐个输入字符,进行isspace(是否是空格来判断一个单词的结束)、行数等的判断,没有哪个字符是否在单词中的判断; printf("characters=%ld,words=%d,lines=%d.",n_chars,n_words,p_lines); printf("partial lines=%d\n",p_lines);看输出,就知道这段程序只判断字符、单词数、与两种行数而已。 整个程序没有判断某个字符是否在单词中的功能

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧