53342321 2019-11-13 21:00 采纳率: 100%
浏览 469
已采纳

NOI上字符串判等问题,测试结果无误,可是最后判分少了1分,可能是代码过于复杂,也有可能是哪里出现了问题,希望大神帮改正错误或给出一个与原答案相似且可通过的答案

描述
判断两个由大小写字母和空格组成的字符串在忽略大小写,且忽略空格后是否相等。
输入
两行,每行包含一个字符串。
输出
若两个字符串相等,输出YES,否则输出NO。
样例输入
a A bb BB ccc CCC
Aa BBbb CCCccc
样例输出
YES
#include #include int main()
{
char ch[500]={};
char th[500]={};
char a[500]={};
char b[500]={};
int i,j=0;
gets(ch);
gets(th);
int len1=strlen(ch);
int len2=strlen(th);
for(i=0;i {
if(ch[i]>='A'&&ch[i]<='Z') ch[i]+=32;
}
for(i=0;i {
if(th[i]>='A'&&th[i]<='Z') th[i]+=32;
}

for(i=0;i<len1;i++)
  {
      if(ch[i]!=' ') a[j++]=ch[i];}
      j=0;
      for(i=0;i<len1;i++)
   {
       if(th[i]!=' ') b[j++]=th[i];}

       int n=strcmp(a,b);
    if (n==0) printf("YES");
    else printf("NO");
    return 0;}

原地址http://noi.openjudge.cn/ch0107/17/
希望大神指点一下

  • 写回答

1条回答

  • QiQaWgYu 2019-11-14 02:03
    关注

    首先,你贴出来的这些代码并不完整。我在你的代码中的a,b后面加了字符串结束符,补充完整后提交
    图片说明
    10分!!!

    #include<stdio.h>
    #include<string.h>
    int main()
    {
        char ch[500];
        char th[500];
        char a[500];
        char b[500];
        int i, j = 0;
        gets(ch);
        gets(th);
        int len1 = strlen(ch);
        int len2 = strlen(th);
        for (i = 0; i < len1; i++) {
            if (ch[i] >= 'A' && ch[i] <= 'Z') ch[i] += 32;
        }
        for (i = 0; i < len2; i++) {
            if (th[i] >= 'A' && th[i] <= 'Z') th[i] += 32;
        }
        for (i = 0, j = 0; i < len1; i++)
        {
            if (ch[i] != ' ') a[j++] = ch[i];
        }
        a[j] = 0;
        j = 0;
        for (i = 0; i < len2; i++)
        {
            if (th[i] != ' ') b[j++] = th[i];
        }
        b[j] = 0;
    
        int n = strcmp(a, b);
        if (n == 0) printf("YES");
        else printf("NO");
        return 0;
    }
    
    

    以下是我写的,也是10分,你可以看一看

    #include<stdio.h>
    void main() {
        char s1[100], s2[100];
        int i, j;
        gets(s1);
        gets(s2);
        i = 0; j = 0;
        while (s1[i] != 0 && s2[j] != 0) {
            if (s1[i] == s2[j] || s1[i] + 32 == s2[j] || s1[i] - 32 == s2[j]) {
                i++;
                j++;
            }
            else if (s1[i] == 32)
                i++;
            else if (s2[j] == 32)
                j++;
            else
                break;
        }
        if (s1[i] != 0 || s2[j] != 0)
            printf("No");
        else
            printf("Yes");
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python