8051句和字计数器

时间:2015-05-03 09:11:21

标签: 8051 keil c51

我在互联网上找到了这个代码,假设要计算8051 MCU上的句子。 有人可以向我解释在有问号的地方究竟发生了什么。 任何形式的帮助将受到高度赞赏。

#include<string.h>

char code  *text=" what  is a program? that  has,   a   a lot of errors!  When "   ;     
char code  *text1=" you compile. this  file,   uVision. reports a number of? ";
char code  *text2=" problems that you! may interactively correct. "  ;  //Null characters are also included in array!!!

void count ( char pdata*  ,  char pdata*); 

void main (void){

char pdata   Nw,Ns;
char data TextNw[2],TextNs[2];
    count(&Nw, &Ns); // call subroutine
    TextNw[0]=Nw/10;   //?????????????????????????????????
    TextNw[1]=Nw%10;   //?????????????????????????????????
    TextNs[0]=Ns/10;   //?????????????????????????????????
    TextNs[1]=Ns%10;   //?????????????????????????????????

    while(1);

}


void count ( char pdata *Nw, char pdata  *Ns ){


unsigned char N, i, ch;
typedef enum  {idle1, idle2} state;   //?????????????????????????????????
state S;   // begining state


    P2=0x00;        // pdata bank definition it must be performed first!! 
    *Ns=*Nw=0;      // without proper start-up there is no initialisation, initialise now!! 
    S=idle1;        // beginning state
    N=strlen(text)+strlen(text1)+strlen(text2)+3; //????????????? + 3 to acount 3 Null characters!
    P2=0x00;                                      // pdata bank definition
    for(i=0;i!=N;i++){
        ch=text[i];                               // take a caharacter from the text
        switch (S)
        {
            case (idle1):{
                if (ch==0) break;                 // skip NULL terminating character!
                if (ch!=' '){
                            S=idle2;
                            (*Nw)++;
                            }
                break;
            }
            case(idle2):{
                if (ch==0) break;                  // skip NULL terminating character!
                if((ch==' ')||(ch==','))S=idle1;
                else if ((ch=='?')||(ch=='.')||(ch=='!')){
                                                        S=idle1;
                                                        (*Ns)++;
                                                        }
                break;
            }
          }

     }

} 

1 个答案:

答案 0 :(得分:1)

这个程序结合两件事 - 计算文本中的句子数并计算文本中的单词数。计数完成后,结果将存储在2-char数组中。例如,对于3个句子中的57个单词,结果将按以下方式存储:TextNw = {'5','7'}TextNs = {'0','3'}

变量N包含文本的全长,并添加3个空终止字符(每个句子一个)。

算法同时计算单词和句子。在idle1状态下,计数处于字数统计模式。在idle2状态下,计数处于句子计数模式。根据正在读取的当前字符交换模式 - 如果遇到分隔符,则增加适当的计数器。