JeffQury 2024-01-22 22:33 采纳率: 93.3%
浏览 9
已结题

C语言比较输入字符串是否相同

这是一段比较两个输入的字符串是否包含相同的字符和相同数量的每个字符
前面还理解,后面到了第一个for循环就蒙了,既不理解,调试完之后发现也不是赋值,然后到第二个for循环发现coun1有几个在数组第37个到40变成了1,char不是一个字符只占用1个字节吗,为什么会到37才有1,很不理解是什么意思

img


#include<stdio.h>
#include<string.h>
int main()
{
    char str1[101],str2[101];
    scanf("%s%s",str1,str2);
    int len1 = strlen(str1);
    int len2=strlen(str2);
    if(len1!=len2)
    {
        printf("NO\n");
        return 0;
    }
    char count1[256]={0};
    char count2[256]={0};
    for(int i=0;i<len1;i++)
    {
        count1[str1[i]]++;
        count2[str2[i]]++;
    }
    for(int i =0;i<256;i++)
    {
        if(count1[i]!=count2[i])
        {
            printf("NO");
            return 0;
        }
    }
    printf("YES\n");
    return 0;
}
  • 写回答

3条回答 默认 最新

  • 蒙奇D索大 2024-01-22 22:43
    关注

    这个代码的解法属于暴力求解
    第一个for循环在记录每个字符出现的个数,这里它是借用了两个字符数组来实现的,现在的ASCII码值是从0-255,所以它这里创建了两个大小为256的数组,用来记录字符串中出现的字符及对应的个数;
    第二个for循环是在将两个数组的每个元素进行比较,之所以全部都是0在进行比较,这是因为你输入的字符串不可能涵盖所有的字符,比如你输入的是“abc”,它进行有效比较的就是在下标为97/98/99的这三个元素,其它下标的元素出现的次数全部都为0;
    在第二个for循环中,如果出现了下标相同但是数据不同的元素,那就说明这两个字符串不相等;
    以上就是这个代码的具体功能

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

报告相同问题?

问题事件

  • 系统已结题 1月30日
  • 已采纳回答 1月22日
  • 修改了问题 1月22日
  • 创建了问题 1月22日

悬赏问题

  • ¥15 微信小程序web-view嵌套H5页面IOS左滑会出现相同的页面,有什么解决方法吗?
  • ¥60 如何批量获取json的url
  • ¥15 comsol仿真压阻传感器
  • ¥15 Python线性规划函数optimize.linprog求解为整数
  • ¥15 llama3中文版微调
  • ¥15 pg数据库导入数据序列重复
  • ¥15 三分类机器学习模型可视化分析
  • ¥15 本地测试网站127.0.0.1 已拒绝连接,如何解决?(标签-ubuntu)
  • ¥50 Qt在release捕获异常并跟踪堆栈(有Demo,跑一下环境再回答)
  • ¥30 python,LLM 文本提炼