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
укажите, что подсчет находится в режиме подсчета предложений. Режимы меняются местами в зависимости от читаемого текущего символа - если встречается разделитель, соответствующий счетчик увеличивается.