C语言:写一个程序读入一条句子中的所有单词,并计算该语句中所有单词的平均长度。假定句子以换行结束,单词间用空格分隔,并且每个单词长度不超过25个字符。 **提示信息:“请输入一行字符:“ **输出格

题目

写一个程序读入一条句子中的所有单词,并计算该语句中所有单词的平均长度。假定句子以换行结束,单词间用空格分隔,并且每个单词长度不超过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;
}

猜你喜欢

转载自blog.csdn.net/gary101818/article/details/129431484