不需要睡觉o 2024-05-01 11:21 采纳率: 94.7%
浏览 3
已结题

代码统计输入的单词数,以|作为结束符,当输入回车键就算另一个单词,但是如果回车键紧跟着的是连字符'-'则不算作新的单词 这个代码怎么改

代码统计输入的单词数,以|作为结束符,当输入回车键就算另一个单词,但是如果回车键紧跟着的是连字符'-'则不算作新的单词 这个代码怎么改


#include<stdio.h>
int main(){
int inword=0;
int new_words=0;
char ch;
printf("Please enter some words to analyzed,use'|' to quit\n");
while((ch=getchar())!='|')
{
    if(!inword&&ch!=' ')
    {
        inword=1;
        new_words++;
    }
    if(inword&&ch==' ')  
        inword=0;
    if(inword&&ch=='\n'&&ch++!='-')
    {
        inword=1;
        new_words++;
     } 
}
printf("words=%d",new_words);
return 0;
}
  • 写回答

4条回答 默认 最新

  • 关注

    中午好🌞🌞🌞
    本答案参考ChatGPT-3.5

    这个代码需要修改三个部分来符合题目要求:

    1. 输入回车键就算另一个单词

    2. 如果回车键紧跟着的是连字符'-'则不算作新的单词

    3. 在输入连续多个空格的时候只算一个单词

    以下是针对上述三个部分的解决方案:

    1. 判断回车键后并计数

    在原来的代码中,在遇到空格后,将inword变量置为0,表示当前不在一个单词中。在这里,我们可以增加一个判断,若遇到回车键,则认为进入了一个新的单词。

    if(inword&&ch==' ')
        inword=0;
    if((ch == '\n' || ch == '\r') && ch++)  //判断回车键并计数
    {
        inword=1;
        new_words++;
    }
    
    1. 判断连字符后不计数

    在原来的代码中,在遇到回车键后,将inword变量置为1,表示当前在一个单词中。在这里,我们可以增加一个判断,若遇到连字符,则将inword变量置为0,表示当前不在一个单词中,不计数。同时,如果连字符后又进入了新的单词,也需要计数。

    if((ch == '\n' || ch == '\r') && ch++)
    {
        if(ch == '-') inword = 0;  //判断连字符并不计数
        else
        {
            inword = 1;
            new_words++;
        }
    }
    
    1. 在输入连续多个空格的时候只算一个单词

    在原来的代码中,在遇到回车键或者空格后,将inword变量置为0,表示当前不在一个单词中。在这里,我们需要增加一个判断,若在空格中,则继续读取后续的空格,直到读到下一个非空格字符。

    if(inword&&ch==' ')
    {
        inword=0;
        while((ch=getchar())==' ');  //输入连续多个空格只算一个单词
    }
    

    综合起来,我们修改后的代码如下所示:

    #include<stdio.h>
    int main(){
        int inword=0;
        int new_words=0;
        char ch;
        printf("Please enter some words to analyzed,use'|' to quit\n");
        while((ch=getchar())!='|')
        {
            if(!inword&&ch!=' ')
            {
                inword=1;
                new_words++;
            }
            if(inword&&ch==' ')
            {
                inword=0;
                while((ch=getchar())==' ');  //输入连续多个空格只算一个单词
            }
            if((ch == '\n' || ch == '\r') && ch++)  //判断回车键并计数
            {
                if(ch == '-') inword = 0;  //判断连字符并不计数
                else
                {
                    inword = 1;
                    new_words++;
                }
            }
        }
        printf("words=%d",new_words);
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 5月22日
  • 已采纳回答 5月14日
  • 创建了问题 5月1日

悬赏问题

  • ¥20 python忆阻器数字识别
  • ¥15 无法输出helloworld
  • ¥15 高通uboot 打印ubi init err 22
  • ¥20 PDF元数据中的XMP媒体管理属性
  • ¥15 R语言中lasso回归报错
  • ¥15 网站突然不能访问了,上午还好好的
  • ¥15 有没有dl可以帮弄”我去图书馆”秒选道具和积分
  • ¥15 semrush,SEO,内嵌网站,api
  • ¥15 Stata:为什么reghdfe后的因变量没有被发现识别啊
  • ¥15 振荡电路,ADS仿真