zoukankan      html  css  js  c++  java
  • 单词计数

    这个是单词计数
    有点难理解,不是说结构多难,而是这本书其实也没阐明这个程序的功能
    再加上是翻译过来的,刚开始看还是会蒙逼的
     
    阐述下整个逻辑:
    共有5个变量,c是我们输入的字符,nl代表 的个数,nw代表单词数,nc表示字母数
    所谓的IN 和 OUT就是一个种状态,有点类似于标志寄存器
    我们首先,给定的状态state = OUT,即初始状态是在单词外的,接着nl nw nc 的初始值也都是0
    nl = nw = nc = 0相当于 nl = (nw = (nc = 0))
    现在开始循环体的执行,循环的条件不说了,上次说过
    我们令c = getchar() = 'abc'
    其实是分别循环了'a'  'b' 'c'  ' '(这个我也是在OD的时候发现的,刚开始学汇编只是无聊,但发现这玩意有时还挺有用)
    很明显经过++nc 后,nc = 4
    我们一个个分析,首先是'a':执行的是else if (state == OUT)循环体的内容,nw = 1,但此时state = IN了
                                  接着是'b':不执行啥
                   接着是'c':不执行啥
                                  接着是' ':执行的是if (c == ' ') 循环体的内容,nl = 1
     
    所以结果可能是 nl = 1, nw = 1,nc = 4
    我们来看看结果,bingo,正确的
                                                
    #define IN 1 //在单词内       
    #define OUT 0 //在单词外
     
    int main()
    {
     
           int c, nl, nw, nc, state; //nl表示单纯换行数,nw表示单词数,nc表示字符数
     
           state = OUT;
           nl = nw = nc = 0;
           while ((c = getchar()) != EOF)
           {
                  ++nc;
                  if (c == ' ')
                          ++nl;
                  if (c == ' ' || c == ' ' || c == ' ')
                          state = OUT;
                  else if (state == OUT)
                          {
                                 state = IN;
                                 ++nw;
                          }
           }
           printf("nl = %d , nw = %d , nc = %d ", nl, nw, nc);
           system("pause");
           return 0;
    }
     
    演示一遍:
    我们输入了两个单词,nw = 2,自然getchar吸收了两个 ,nl  = 2 ,
    一共有6个字母,由于getchar会吸收两个 ,nc = 6 + 2 = 8
  • 相关阅读:
    IOS之推送通知(本地推送和远程推送)
    IOS,苹果内购和添加广告
    CSS3选择器、背景、边框、文本
    CSS2D旋转、过渡、动画
    JavaScript Array、Date、String
    那些不常用却很有的CSS
    纯CSS打造兼容各种浏览器的几何图形
    安装 SQLManagementStudio_x86_CHS(SQL Server Management Studio) 老提示重启的解决办法
    关于使用Html.RenderPartial和Html.Partial显示分部视图时提示参数错误的BUG
    学习从实践开始之jQuery插件开发:对话框插件开发
  • 原文地址:https://www.cnblogs.com/EvilAnne/p/9435201.html
Copyright © 2011-2022 走看看