Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? 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