我在互联网上找到了这个代码,假设要计算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;
}
}
}
}
答案 0 :(得分:1)
这个程序结合两件事 - 计算文本中的句子数并计算文本中的单词数。计数完成后,结果将存储在2-char数组中。例如,对于3个句子中的57个单词,结果将按以下方式存储:TextNw = {'5','7'}
和TextNs = {'0','3'}
。
变量N
包含文本的全长,并添加3个空终止字符(每个句子一个)。
算法同时计算单词和句子。在idle1
状态下,计数处于字数统计模式。在idle2
状态下,计数处于句子计数模式。根据正在读取的当前字符交换模式 - 如果遇到分隔符,则增加适当的计数器。