接受平凡 努力出众 2023-04-03 12:40 采纳率: 0%
浏览 106

关于#c语言#的问题,请各位专家解答!

1029 旧键盘
为什么不对啊

```c
#include<stdio.h>
int main()
{
    char a[81],s[81],c[81],b[81];
    int i=0,j,t=0,f;
    gets(a);
    gets(s);
    for(i=0;a[i]!='\0';i++)
    {
        f=1;
       for(j=0;s[j]!='\0';j++)
       {
           if(a[i]==s[j])
           {
              f=0; break;
           }
           
           
       }
        if(f==1)
            c[t++]=a[i];
    }
   
  int x=1;
    b[0]=c[0];
    for(i=1;c[i]!='\0';i++)
    {
        f=1;
        for(j=0;j<i;j++)
        {
        if(c[i]==b[j] || c[i]-32==b[j])
        f=0;
       }
        if(f==0)
        continue;
        b[x++]=c[i];
    }
    b[x]='\0';
    for(i=0;b[i]!='\0';i++)
    {
        
     if(b[i]>='A' && b[i]<='Z' || b[i]<='9' && b[i]>='0')
       printf("%c",b[i]);
    else
        printf("%c",b[i]-32);
    }
    printf("\n");
  return 0;
}

```

  • 写回答

3条回答 默认 最新

  • 逆风水手 2023-04-03 13:11
    关注

    gets 函数已经被标记为不安全的函数,可以替换为更安全的 fgets 函数。
    代码中没有处理多个空格字符的情况。当输入的字符串中包含多个连续的空格字符时,输出结果中可能存在多余的空格字符。
    在比较字符是否相等时,应该考虑大小写敏感性。题目要求忽略大小写,但是代码中只考虑了字符 ASCII 码值相等的情况,没有考虑大小写字母的关系。
    在输出结果时,应该按照题目要求将字母转换为大写形式。
    建议对代码进行以下修改:

    
    #include <stdio.h>
    #include <string.h>
    #include <ctype.h>  // 包含 toupper 函数
    
    int main() {
        char a[81], s[81], c[81], b[81];
        int i = 0, j, t = 0, f;
        fgets(a, 81, stdin);  // 使用 fgets 获取输入,限制输入长度为 80 个字符(最后一个字符为换行符)
        fgets(s, 81, stdin);
        for (i = 0; a[i] != '\n'; i++) {  // 遍历字符串直到遇到换行符
            f = 1;
            for (j = 0; s[j] != '\n'; j++) {  // 遍历字符串直到遇到换行符
                if (toupper(a[i]) == toupper(s[j])) {  // 将字符转换为大写形式进行比较
                    f = 0;
                    break;
                }
            }
            if (f == 1 && !isspace(a[i]))  // 当 a[i] 不是空格时才将其存入 c 数组
                c[t++] = a[i];
        }
    
        int x = 1;
        b[0] = c[0];
        for (i = 1; c[i] != '\0'; i++) {
            f = 1;
            for (j = 0; j < i; j++) {
                if (toupper(c[i]) == toupper(b[j])) {  // 将字符转换为大写形式进行比较
                    f = 0;
                    break;
                }
            }
            if (f == 0)
                continue;
            b[x++] = c[i];
        }
        b[x] = '\0';
        for (i = 0; b[i] != '\0'; i++) {
            if (isalpha(b[i]))  // 判断是否为字母
                printf("%c", toupper(b[i]));  // 转换为大写字母输出
            else
                printf("%c", b[i]);
        }
        printf("\n");
    
        return 0;
    }
    
    评论

报告相同问题?

问题事件

  • 创建了问题 4月3日

悬赏问题

  • ¥100 ensp启动设备蓝屏,代码clock_watchdog_timeout
  • ¥15 Android studio AVD启动不了
  • ¥15 陆空双模式无人机怎么做
  • ¥15 想咨询点问题,与算法转换,负荷预测,数字孪生有关
  • ¥15 C#中的编译平台的区别影响
  • ¥15 软件供应链安全是跟可靠性有关还是跟安全性有关?
  • ¥15 电脑蓝屏logfilessrtsrttrail问题
  • ¥20 关于wordpress建站遇到的问题!(语言-php)(相关搜索:云服务器)
  • ¥15 【求职】怎么找到一个周围人素质都很高不会欺负他人,并且未来月薪能够达到一万以上(技术岗)的工作?希望可以收到写有具体,可靠,已经实践过了的路径的回答?
  • ¥15 Java+vue部署版本反编译