0

我在互联网上找到了下面的这段代码,假设它可以计算 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;
            }
          }

     }

} 
4

1 回答 1

1

这个程序结合做两件事——计算文本中的句子数量和计算文本中的单词数量。计数完成后,结果将存储在 2 字符数组中。例如,对于 3 个句子中的 57 个单词,结果将存储为:TextNw = {'5','7'}TextNs = {'0','3'}

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

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

于 2015-05-03T21:03:23.570 回答