#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;
}
重写比较两个字符串函数,求解这个递归返回时出什么问题,能比较第一字符个,第二个开始就没反应了
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
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; } }本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报