8051 предложение и счетчик слов

Я нашел этот код ниже в интернете, который должен считать предложения на 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 ответ

Решение

Эта программа делает две вещи вместе - подсчитывает количество предложений в тексте и подсчитывает количество слов в тексте. По завершении подсчета результаты сохраняются в двухзначных массивах. Например, для 57 слов в 3 предложениях результаты будут сохранены как это: TextNw = {'5','7'} а также TextNs = {'0','3'},

Переменная N содержит всю длину текста с добавлением 3 нулевых завершающих символов (по одному в предложении).

Алгоритм одновременно считает слова и предложения. В idle1 Укажите, что счет находится в режиме подсчета слов. В idle2 укажите, что подсчет находится в режиме подсчета предложений. Режимы меняются местами в зависимости от читаемого текущего символа - если встречается разделитель, соответствующий счетчик увеличивается.

Другие вопросы по тегам