来自M78的光之文轩 2022-10-20 19:10 采纳率: 92%
浏览 61
已结题

求句子中单词的长度 自己的代码找不出错误

代码找不出错误在哪
原题在http://noi.openjudge.cn/ch0107/24/


#include <stdio.h>
#include <string.h>
int main(){
    char s[1000][999]={'\0'},ch;
    int op=0,oq=0,i,t,e=0;
    while(scanf("%c", &ch),ch!='\n')
    {
        if(ch==' '){
            op++;
            oq=0;
        }
        else{
            s[op][oq++]=ch;
        }
    }
    for(i=0;i<=op;i++){
        if(s[i][0]=='\0') continue;
        t=strlen(s[i]);
        if(e==0){
            printf("%d", t);
            e=1; 
        }
        else{printf(",%d", t);}
    }
    return 0;
}
  • 写回答

3条回答 默认 最新

  • 关注

    代码逻辑没有大问题,可能是在一些临界值或者特殊情况的时候处理有问题,比如只有1个单词的时候,单词长度为999,你定义的数组就无法正确的获取字符串的长度,因为没有给\0预留位置。
    你先尝试把s[1000][999]改成s[300][1000] ,运行看看是否可以,如果还不行,用我下面的代码试一下,下面的代码修改了一下逻辑,把空字符串全部过滤掉了。

    #include <stdio.h>
    #include <string.h>
    int main(){
        char s[300][1000]={'\0'},pre = 0,ch;
        int op=0,oq=0,i,t,e=0;
        while(scanf("%c", &ch),ch!='\n')
        {
            if(ch == ' ')
                oq = 0;
            else 
            {
                if(pre ==' ')
                {
                    op++;
                    s[op][oq++] = ch;
                }else
                    s[op][oq++] = ch;
            }
            pre = ch;
        }
        for(i=0;i<=op;i++){
            //if(s[i][0]=='\0') continue;
            t=strlen(s[i]);
            if(t == 0)
                continue;
            if(e==0){
                printf("%d", t);
                e=1; 
            }
            else{printf(",%d", t);}
        }
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 10月30日
  • 已采纳回答 10月22日
  • 创建了问题 10月20日

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀