gpt4 book ai didi

在没有任何标准库的情况下比较不同长度的字符串

转载 作者:太空宇宙 更新时间:2023-11-04 03:20:05 25 4
gpt4 key购买 nike

我想写一个函数,根据字母顺序比较不区分大小写的字符串。

char compare(char *x, char *y){
while (*x != '\0'){
if (tolower(*x) < tolower(*y)){
return -1;
}
else if (tolower(*x) > tolower(*y)){
return 1;
}
else{
x++;
y++;
}
}
return 0;
}

但此功能不适用于首字母很少的单词(例如单词和文字游戏)。所以我尝试修改它:

char compare(char *x, char *y){
if (len(*x) < len(*y)){
while (*x != '\0'){
if (tolower(*x) < tolower(*y)){
return -1;
}
else if (tolower(*x) > tolower(*y)){
return 1;
}
else{
x++;
y++;
}
}
// all n letters are the same (case insensitive), where n is a length of x
if (*y != '\0') return -1;
}
else {
while (*y != '\0'){
if (tolower(*x) < tolower(*y)){
return -1;
}
else if (tolower(*x) > tolower(*y)){
return 1;
}
else{
x++;
y`++;
}
}
// all n letters are the same (case insensitive), where n is a length of y
if (*x != '\0') return 1;
}
return 0;
}

但是没有用。我如何修改此函数,使“wordplay”大于“word”?

最佳答案

您的第一次尝试(几乎)没问题,只是需要根据您提出的问题进行调整

char compare(const char *x, const char *y){
while ((*x != '\0') && (*y != '\0')) { // testing y for symmetry
if (tolower(*x) < tolower(*y)){
return -1;
}
else if (tolower(*x) > tolower(*y)){
return 1;
}
else{
x++;
y++;
}
}
// added conditions to handle shorter/longer strings
if (*x == '\0')
{
if (*y == '\0')
{
return 0;
}
else
{
return -1;
}
}
return 1;
}

我删除了长度测试,添加了处理您提到的情况的逻辑。也许它不是最佳代码,但它完成了工作(另请注意,我在主循环中测试了 x 和 y 字符串的结尾)

我已经针对 stricmp 的结果进行了测试,我得到了相同的结果:

void test(const char*a,const char*b)
{
printf("test %s %s => %d, %d\n",a,b,compare(a,b),stricmp(a,b));
}

int main(void) {
test("abc","aBcd");
test("abc","aBcd");
test("abc","aBc");
test("abcdef","abC");
test("abcdef","cdef");

}

结果:

test abc aBcd => -1, -1
test abc aBcd => -1, -1
test abc aBc => 0, 0
test abcdef abC => 1, 1
test abcdef cdef => -1, -1

关于在没有任何标准库的情况下比较不同长度的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47240775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com