结构推理 设有一篇英文短文,每个单词之间是用空格分开的,试编写一算法,按照空格数统计短文中单词的个数。
   算法分析如下:要统计单词的个数先要解决如何判别一个单词,应该从输入行的开头一个字符一个字符地去辨别。假定把一个文本行放在数组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();
   }
【答案解析】