Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
3年前关闭。
我需要压缩两个字符串并使用递归比较它们。在计算过程中,差异的数量最多为两个。
我尝试了这个:
我编写的代码仅返回0或1,而不返回差异量...
你能告诉我我在做什么错吗?
谢谢 :)
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
3年前关闭。
我需要压缩两个字符串并使用递归比较它们。在计算过程中,差异的数量最多为两个。
我尝试了这个:
int strcmp1(char *str1, char *str2){
int err=0;
if(strlen(str1)-strlen(str2)>1 ||strlen(str1)-strlen(str2)<1)
return 0;
if (*str1 =='\0' && *str2=='\0'|| err==2)
return err;
if (*str1!=*str2)
err++;
return strcmp1(str1 + 1, str2 + 1);
}
我编写的代码仅返回0或1,而不返回差异量...
你能告诉我我在做什么错吗?
谢谢 :)
最佳答案
代码包含几个错误:
除非您真的知道自己要做什么,否则请勿将strcmp()
用作函数名称!此功能及其语义由C标准定义。编译器可以依靠它,并且可以用更高效的实现替换调用strlen(str1)-strlen(str2) > 1
易于(定义)无符号整数下溢,并且在大多数情况下都适用(例如strlen("a") - strlen("aaaaaaa") > 1
为true)。
使用strlen(str1) > strlen(str2) + 1
(通常您也应该检查+ 1
操作是否有溢出)err
的修改将永远不会被递归调用看到。可以将其声明为static
或将其作为参数传递给函数。
关于c - 如何在C中使用递归比较两个字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39257049/
10-14 07:53