gpt4 book ai didi

检查C中字符串是否按字母顺序排序

转载 作者:行者123 更新时间:2023-11-30 19:17:31 25 4
gpt4 key购买 nike

我想编写一个递归函数,获取字符串指针并返回int;如果字符串按字母顺序排列(如“abbcdj”),则应返回 1,否则应返回 0。

int CheckS(char *string)
{
if (string == NULL)
return 1;

if (strncmp(string, string + 1, 1) >= 0)
CheckS(string + 1);
else
return 0;
}

但它并没有像预期的那样工作。我的想法是取出一个字母和下一个字母,然后检查下一个字母是否按字母顺序排列在前面;我也检查了这个

    if (string-(string+1)>=0)
CheckS(string + 1);

但没有结果。

最佳答案

你的编译器应该提示你的函数并不总是返回一个值。它不能保护自己免受空字符串的影响(尽管它确实处理空指针,这通常很好),并且它错误地处理了字符串中最后一个非空字节与尾随空字节的比较。另外,我认为您的比较使用了错误的符号。使用您的技术,您可以编写:

int CheckS(char *string)
{
if (string == NULL || *string == '\0' || *(string + 1) == '\0')
return 1;
if (strncmp(string, string + 1, 1) <= 0)
return CheckS(string + 1);
else
return 0;
}

如果*string*(string + 1)之前,strncmp()函数将返回负值;如果字符相等则为零,如果 *string 大于 *(string + 1) 则为正值。不过,这样写会更直接:

int CheckS(char *string)
{
if (string == NULL || string[0] == '\0' || string[1] == '\0')
return 1;
if (string[0] <= string[1])
return CheckS(string + 1);
else
return 0;
}

请注意,这不会拒绝或忽略非字母字符,也不会在比较之前对它们进行大小写转换。这可以看作是 GIGO——Garbage In, Garbage Out。

另请注意,我将“递归函数”作为要求,即使合理的代码是迭代的,而不是递归的。该函数使用尾递归的形式,可以轻松转换为迭代。

关于检查C中字符串是否按字母顺序排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28133435/

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