比较字符串c和字符差异

标签 c

我有一项比较字符串的学校作业。
比较不区分大小写,因此大写或小写相同。

如果字符串相等,则输出第一个字符串。但是,如果字符串不相等,则输出是不同字符的数量。

示例:

Input:
    string1: LION 
    string2: lion 
Output: LION

Input: 
    string1: LION
    string2: LEON 
Output: 1 (because 'I' & 'E' is not equal)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main()
{
    int len, c, d, i, counter=0;
    char a[1000],b[1000];
    char *temp;
    scanf("%[^\n]s", a);
    scanf(" %[^\n]s", b);
    temp = (char *) malloc(strlen(a));
    strcpy(temp,a);
    len= strlen(a);
    for(i=0;i<len;i++)
    {
        c= tolower(a[i]);
        d= tolower(b[i]);
        if(c!=d) counter++;
    }

    if(counter) 
    {
        printf("%d\n",counter);
    } else {
        printf("%s\n",temp);
    }
    free(temp);
    return 0;
}

我已经创建了程序,但我的分数只有 37.5/100 或者我失败了 8 个测试用例中的 5 个。那么我的程序出了什么问题?

最佳答案

你的代码很难理解 两个版本。首先计算差异并添加长度差异。 第二个只计算差异,如果长度不相等则返回-1 字符串相等时返回零

size_t my_strcmp(const char *str1, const char *str2)
{
    size_t result = abs(((int)strlen(str1) - (int)strlen(str2)));

    //or 
    //int slen1 = strlen(str1);
    //int slen2 = strlen(str2);
    //int result = slen1 > slen2 ? slen1 - slen2 : slen2 - slen1;

    while (*str1 && *str2)
    {
        if (tolower(*str1++) != tolower(*str2++))
        {
            result++;
        }
    }
    return result;
}

int my_strcmp(const char *str1, const char *str2)
{
    int result = (strlen(str1) != strlen(str2)) * -1;

    if (!result)
    {
        while (*str1)
        {
            if (tolower(*str1++) != tolower(*str2++))
            {
                result++;
            }
        }
    }
    return result;
}

和主要部分

int x;
switch((x = my_strcmp(string1, string2)))
{
  case -1:
    printf("The strings have a different length\n");
    break;
  case 0:
    printf("%s\n", string1);
    break;
  default:
    printf("Number of differences %d\n", x);
    break;
}

关于比较字符串c和字符差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45514834/

相关文章:

c - 使用数据结构和算法(特别是 C 编程语言)的内存数据库

c - 将指针参数传递给其他文件中的函数

c - 程序无法正确打印数据

c - 如何让子进程修改链表C

c - 很难用函数打印结构成员

c - 获取指向字符串常量的指针

c - x86 32 位汇编中快速排序的优化

我可以通过同时索引 c 中的两个矩阵来将矩阵的值传递给另一个矩阵吗?

C: 两个不同的数组指向同一个结构

c - while 循环中的 OR 运算符不退出