使用指针比较 C 中的字符串

问题描述 投票:0回答:1

我正在学习 C 课程,我很难弄清楚以下练习。

给定 2 个字符指针,该函数应按字典顺序比较指针指向的字符串(区分大小写)。如果发现第一个字符串分别小于、等于或大于第二个字符串,则它应分别返回负整数、0(零)或正整数值。

例如:(第一个)字符串“Fan”小于(第二个)字符串“Fun”,因此在这种情况下该函数应返回负整数值。

请注意:大写字母与小写字母不同('A'!= 'a')。


我尝试创建每个字符串的总和,然后比较它们以查看哪个更大。 这是我写的函数:

int StringCompare(const char *str1, const char *str2)
{
    int str1_sum = 0;
    int str2_sum = 0;

    while (*str1 != '\0')
    {
        str1_sum += *str1++;
        str1++;
    }

    while (*str2 != '\0')
    {
        str2_sum += *str2++;
        str2++;
    }

    if (str1_sum > str2_sum)
    {
        return 1;
    }
    else if (str1_sum < str2_sum)
    {
        return -1;
    }
    else
    {
        return 0;
    }
}

不幸的是,它不起作用,我收到以下错误:

Running test: StringCompare("oeis03HWoLn\I7]JJ=7yCWei4H\SN7S", "BlA;Vx<2lYY6r`Mu0Z1bnXL\EMqRkau")  --  Failed


当我尝试调试它时,一切顺利,我不确定是否我错过了代码中的某些内容,或者我只是没有正确理解练习。

如有帮助,我们将不胜感激!


更新: 我用以下内容更新了我的代码:

int StringCompare(const char *str1, const char *str2)
{
    
    while(*str1 != '\0' && *str2 != '\0'){
        if(*str1 > *str2) {
            return 1;
        } else if(*str1 < *str2) {
            return -1;
        }
        str1++;
        str2++;
    }
    
    if(*str1 == '\0' && *str2 == '\0'){
        return 0;
    } else if(*str1 == '\0'){
        return -1;
    } else {
        return 1;
    }
}

不幸的是,现在我收到以下错误消息:

Running test: StringCompare("(null)", "Hello !!!???")  --  Failed: Invalid memory reference

我也尝试运行下面建议的代码 Surge,但我也收到了相同的错误。

有谁知道可能是什么原因吗?

c string pointers
1个回答
0
投票

关于对词典顺序的理解,您收到的评论是正确的。为了完整起见,这是我经过一些测试的解决方案:

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

int StringCompare(const char *str1, const char *str2)
{

    while (*str1 == *str2)
    {
        if (*str1 == 0) return 0;
        str1++;
        str2++;
    }
    return (*str2 < *str1) - (*str1 < *str2);
}

int main(void) {
    
    printf("\"AD\":\"BC\" -> %d\n", StringCompare("AD", "BC"));
    printf("\"Ab\":\"aa\" -> %d\n", StringCompare("Ab", "aa"));
    printf("\"xxx\":\"aa\" -> %d\n", StringCompare("xxx", "aa"));
    
    return EXIT_SUCCESS;
}

希望有帮助。 (空字符串是排序中最低的。)

© www.soinside.com 2019 - 2024. All rights reserved.