设有一篇英文短文,每个单词之间是用空格分开的,编写一算法,按照空格数统计短文中单词的个数。
1个回答
展开全部
【答案】:算法由主函数和统计文中单词个数两个函数组成。
统计文中单词个数的算法分析如下:要统计单词的个数先要解决如何判别一个单词的问题,应该从输入行的开头一个字符一个字符地去辨别。假定把一个文本放在数组s中,那么就相当于从s[0]开始逐个检查数组元素,经过若干个空格符之后找到的第一个字母就是一个单词的开头,此时利用一个统计计数器num进行累加1运算,在此之后若连续读到的是非空格字符,则这些字符属于刚统计到的那个单词,因此不应将计数器num累加1,下一次计数应该是在读到一个或几个空格后再遇到非空格字符之时进行。因此,统计一个单词时不仅要满足当前所检查的这个字符是非空格,而且要满足所检查的前一个字符是空格。
程序如下:
#define MAXLEN 50
typedef struct string
{
char ch[MAXLEN];
int len;
}STRING;
int countwords(s)
STRING 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 Rum;
}
main()
{
STRING s={"ab c x def x h ij xxs ty",32};
int num;
num=countwords(s);
printf("words=%d",num);
}
输出结果为:
words=9
统计文中单词个数的算法分析如下:要统计单词的个数先要解决如何判别一个单词的问题,应该从输入行的开头一个字符一个字符地去辨别。假定把一个文本放在数组s中,那么就相当于从s[0]开始逐个检查数组元素,经过若干个空格符之后找到的第一个字母就是一个单词的开头,此时利用一个统计计数器num进行累加1运算,在此之后若连续读到的是非空格字符,则这些字符属于刚统计到的那个单词,因此不应将计数器num累加1,下一次计数应该是在读到一个或几个空格后再遇到非空格字符之时进行。因此,统计一个单词时不仅要满足当前所检查的这个字符是非空格,而且要满足所检查的前一个字符是空格。
程序如下:
#define MAXLEN 50
typedef struct string
{
char ch[MAXLEN];
int len;
}STRING;
int countwords(s)
STRING 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 Rum;
}
main()
{
STRING s={"ab c x def x h ij xxs ty",32};
int num;
num=countwords(s);
printf("words=%d",num);
}
输出结果为:
words=9
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询