2015-05-03 2 views
0

Я нашел этот код ниже в Интернете, который, как предполагается, подсчитывает предложения на 8051 MCU. Может кто-нибудь, пожалуйста, объясните мне, что именно происходит там, где есть вопросительные знаки. Любая помощь будет высоко оценена.8051 предложение и счетчик слов

#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

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

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

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

Смежные вопросы