结构推理
设有一篇英文短文,每个单词之间是用空格分开的,试编写一算法,按照空格数统计短文中单词的个数。
算法分析如下:要统计单词的个数先要解决如何判别一个单词,应该从输入行的开头一个字符一个字符地去辨别。假定把一个文本行放在数组s中,那么就相当于从s[0]开始逐个检查数组元素,经过若干个空格符之后找到的第一个字母就是一个单词的开头,此时利用一个统计计数器num进行累加1运算,在此之后若连续读到的是非空格字符,则这些字符属于刚统计到的那个单词,因此不应将计数器num累加1,下一次记数应该是在读到一个或几个空格后再遇到非空格字符开始。因此,统计一个单词时不仅要满足当前所检查的这个字符是非空格,而且要满足所检查的前一个字符是空格。
【正确答案】使用定长顺序串作为存储结构,程序实现如下:
#define MAXLEN 100
typedef struct
{ char ch[MAXLEN];
int len;
}SString;
int countwords(SString s)
{ char prec=''; /*前一个字符赋初值为空格*/
char nowc; /*当前字符*/
int num=0;
int i;
for(i=0;i<s.len;i++)
{ nowc=s.ch[i];
if((nowc!='')&&(prec=='')) /*''中间有一个空格*/
num++;
prec=nowc;
}
return num;
}
msin()
{ SString s={"ab c x def x h i j xxs ty",3 2};
int num;
num=countwords(s);
printf("\nwords=/%d\n",num);
getch();
}
【答案解析】