麦浪佛罗 2023-12-04 23:25 采纳率: 90.5%
浏览 2
已结题

洛谷 字符串 p598 输出有错,求解惑

这是洛谷字符串p1598现在有个问题是我输入测试用例后那个T行要少两个,但我其他l列都没问题,为啥就这列有问题?


#include <stdio.h>
#include<string.h>
int rop(int* pa)
{
    int max=*pa;
    for(int i=1;i<26;i++)
        if(*(pa+i)>max)
            max=*(pa+i);
    return max;
}
int main()
{
    char a[101];
    int t,max,b[26]={0};
    for(int i=1;i<=4;i++)
    {
        gets(a);
        for(int j=1;j<=strlen(a);j++)
            if(a[i]>'A'&&a[i]<'Z')
                b[a[j]-'A']++;
    }
    max=rop(b);
    int c[100][26];
    for(int i=max;i>0;i--)
    {
        for(int j=0;j<26;j++)
        {
            if(b[j]>=i)
                printf("*");
            else
                printf(" ");
        }    
        printf("\n");
    }
    for(int i=0;i<26;i++)
        printf("%c",'A'+i);
    return 0;
}

img

img

按理说R T这两列应该相等的,但为啥就这个T不对,求解惑

  • 写回答

2条回答 默认 最新

  • HYXK_TCXM 2023-12-05 00:07
    关注

    代码的19、20行有问题

    19行应该改为:

    for(int j=0;j<strlen(a);j++)
    

    你原来的代码从1开始遍历,遍历还超出了输入长度,输入的字符串是从0开始存入数组的,最后一位应该是a[strlen(a)-1]啊。

    20行应该改为:

    if(a[j]>='A'&&a[j]<='Z')
    

    你原来写的是 a[i] ,可是在你的代码中 i 的值是 1-4 ,用来统计循环次数,确保输入4行字符串,你写个 a[i] 干什么?
    我根据你的代码推断,你是要判断当前字符是否是大写英文字符,于是改成 a[j] ,这样才是访问当前字符。
    还有,你原来写得是 a[j]>'A'&&a[j]<'Z' ,那你的意思是大写英文字符不包括A和Z咯,这显然不对,加上等于才正确。

    最后附上我修改过的完整代码:

    #include <stdio.h>
    #include<string.h>
    int rop(int* pa)
    {
        int max=*pa;
        for(int i=1;i<26;i++)
            if(*(pa+i)>max)
                max=*(pa+i);
        return max;
    }
    int main()
    {
        char a[101];
        int t,max,b[26]={0};
        for(int i=1;i<=4;i++)
        {
            gets(a);
            for(int j=0;j<strlen(a);j++)
                if(a[j]>='A'&&a[j]<='Z')
                    b[a[j]-'A']++;
        }
        max=rop(b);
        int c[100][26];
        for(int i=max;i>0;i--)
        {
            for(int j=0;j<26;j++)
            {
                if(b[j]>=i)
                    printf("*");
                else
                    printf(" ");
            }    
            printf("\n");
        }
        for(int i=0;i<26;i++)
            printf("%c",'A'+i);
        return 0;
    }
    

    目前用你的输入样例,在我这是能正确输出的,其他地方我就没细看了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月13日
  • 已采纳回答 12月5日
  • 修改了问题 12月4日
  • 创建了问题 12月4日

悬赏问题

  • ¥15 github录制项目
  • ¥15 H.264选择性加密例程
  • ¥50 windows的SFTP服务器如何能批量同步用户信息?
  • ¥15 centos7.9升级python3.0的问题
  • ¥15 如何解决调试dev-出++5.11不成功问题
  • ¥15 安装CentOS6时卡住
  • ¥20 关于#监控系统#的问题,如何解决?(相关搜索:系统软件)
  • ¥20 c语言写的8051单片机存储器mt29的模块程序
  • ¥60 求直线方程 使平面上n个点在直线同侧并且距离总和最小
  • ¥50 java算法,给定试题的难度数量(简单,普通,困难),和试题类型数量(单选,多选,判断),以及题库中各种类型的题有多少道,求能否随机抽题。