题目
写一个程序读入一条句子中的所有单词,并计算该语句中所有单词的平均长度。假定句子以换行结束,单词间用空格分隔,并且每个单词长度不超过25个字符。
**提示信息:“请输入一行字符:”
**输出格式要求:“总共有%d个单词,平均长度为%d\n”
代码实现
以下提供两种思路的代码:
#include <stdio.h>
//fun1无法解决一次出现多个空格的情况,并且在句末不能出现空格,但本方法简单快捷,并且可以被OJ系统通过
int fun1(){
char sentence[200] = {'\0'};
printf("请输入一行字符:");
gets(sentence);
char * p = sentence; //将数组头部赋值给p
int count = 0; //空格的个数 单词的个数为空格个数加一
int n = 0; //字符总个数(含空格)
while(*p != '\0'){
if(*p == ' '){
count++;
}
n++;
p++;
}
int num = count + 1;
int avg_len = (n - count)/num;
printf("总共有%d个单词,平均长度为%d\n", num, avg_len);
}
//fun2在单词之间可以出现多个空格,在句末也可以出现空格
int fun2(){
char sentence[200] = {'\0'};
printf("请输入一行字符:");
gets(sentence);
char * p = sentence; //将数组头部赋值给p
int num = 0; //单词个数
int len = 0; //单词总长度
int word_len = 0; //单个单词的长度
while(*p != '\0'){
if(*p != ' '){
len++;
word_len++;
}else{ //遇到空格,并且该空格前有词则,词数增加
if(word_len > 0){
num++;
word_len = 0;
}
}
p++; //指针向后移动
if(*p == '\0'){ //若存在最后一个词紧接着'\0' 若有空格后接'\0',已经被考虑到
if(word_len > 0){
num++;
}
}
}
printf("总共有%d个单词,平均长度为%d\n", num, len/num);
}
int main(){
fun1(); // i love you 总共有3个单词,平均长度为2
fun2(); // i love you 总共有3个单词,平均长度为2
return 0;
}