我正在学习 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,但我也收到了相同的错误。
有谁知道可能是什么原因吗?
关于对词典顺序的理解,您收到的评论是正确的。为了完整起见,这是我经过一些测试的解决方案:
#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;
}
希望有帮助。 (空字符串是排序中最低的。)