阿赵秃头敲代码 2021-07-21 10:07 采纳率: 100%
浏览 35
已采纳

重写比较两个字符串函数,求解这个递归返回时出什么问题,能比较第一字符个,第二个开始就没反应了


#include<stdio.h>

int main()
{
    int strcmp(char *p1, char *p2);
    char s1[30],s2[30];
    printf("请输入要比较的字符串s1:");
    gets(s1);
    printf("请输入要比较的字符串s2:");
    gets(s2);
    printf("\n比较中...\n");
    if(strcmp(s1,s2)==0)printf("字符串s1,s2相等\n");
    else if(strcmp(s1,s2)!=0)printf("字符串s1,s2不相等\n");
    return 0;
}

int strcmp(char *p1, char *p2)
{
    if(*p1==*p2)
    {
        int sum=0;
        while(*(p1+1)!='\0'&&*(p2+1)!='\0')
            sum+=strcmp(p1+1,p2+1);
        return sum;
    }
    else if(*p1>*p2)return 1;
    else return -1;
}
  • 写回答

2条回答 默认 最新

  • 八云黧 2021-07-21 10:16
    关注

    1.递归和循环是等价的,你两者一块用就离谱。
    2.逻辑问题主要出在循环,因为p1和p2没有移动,而是通过传入p1+1这样的参数递归调用,所以下一轮循环时p1和p2还是指向第一个字符
    3.一种直观的递归代码实现

    int strcmp(char *p1, char *p2){
        if(*p1==*p2){
          if (*p1=='\0') {
             return 0;
          }
          return strcmp(p1+1,p2+1);
        }else {
           return (*p1>*p2)?1:-1;
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已采纳回答 7月21日
  • 创建了问题 7月21日

悬赏问题

  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿