递归还是用不好
本帖最后由 haiouda 于 2015-3-25 14:10 编辑/***************************************************************************
写一个函数,实现两个字符串的比较。即自己写一个 strcmp 函数,函数原型为
int strcmp(char *p,char *p2); 设p1指向字符串s1,p2指向 s2 。要求当
s1=s2 时,返回值为 0;s1!=s2,返回它们二者第一个不同字符的ASCII码
差值(如“BOY“与“BAD”,第 2 个字母不同,“O”与“A”之差为79-65=14)。
如果 s1 > s2 ,则输出正值;如果 s1 <s2,则输出负值。
***************************************************************************/
#if(1)
#include <stdio.h>
int main()
{
int strcmp(char *y1,char *y2);
char *p1,*p2,s1,s2;
int q=0;
printf("请输入字符串s1=:");
gets(s1);
printf("请输入字符串s2=:");
gets(s2);
p1=s1; p2=s2;
printf("%d\n",strcmp(p1,p2));
return 0;
}
int strcmp(char *y1,char *y2)
{
int t;
if (*(y1)!=*(y2))
{ t=*(y1)-*(y2);
return t;
}
if( *(y1)=='\0' && *(y2)=='\0')
{
t=0;
return t;
}
t=strcmp(y1+1,y2+1);
return t;
}
#endif
递归还是用不好,现在有个警告,哪位能帮改改:handshake
终于改好拉:lol: 可是这么用递归怎么还是不对劲,哪位能再上面基础上再进行改进下,:handshake谢谢
#include <stdio.h>
int strcmp( char* str1, char* str2 );
int main() {
printf( "%d\n",strcmp("hello", "hello1") );
printf( "%d\n",strcmp("hello1", "hello") );
printf( "%d\n",strcmp("hello", "hello") );
}
int strcmp( char* str1, char* str2 ) {
return (*str1==0 && *str2==0)? 0:
(*str1!=*str2)?(*str1-*str2):strcmp(str1+1, str2+1);
}
2楼代码不正确,如果在main中第二次调用strcmp2会出错,因为你用了static int i 你写的我懒得看,自己写了一个
#include<stdio.h>
int strcmp2(char p1[],char p2[]);
int main()
{
int i;
char s1,s2;
scanf("%s",s1);
fflush(stdin);
scanf("%s",s2);
i=strcmp2(s1,s2);
printf("%d\n",i);
return 0;
}
int strcmp2(char p1[],char p2[])
{
static int i=0;
if(p1==p2)
{
i++;
return strcmp2(p1,p2);
}
else
return(int)p1-(int)p2;
} return(int)p1-(int)p2;
这里的强制转换 int可以去掉,一个效果 你代码怎么那么长啊???我晕死。要是递归那么长何必用递归呢,,,不如用for循环还好看点:sweat: 还有点问题,忘记了全部一样返回0了。。。。我勒个去
补上。。
#include<stdio.h>
int strcmp2(char p1[],char p2[]);
int main()
{
int i;
char s1,s2;
scanf("%s",s1);
fflush(stdin);
scanf("%s",s2);
i=strcmp2(s1,s2);
printf("%d\n",i);
return 0;
}
int strcmp2(char p1[],char p2[])
{
static int i=0;
if(p1==p2&&p1!='\0'&&p2!='\0')
{
i++;
return strcmp2(p1,p2);
}
else if(p1!=p2)
returnp1-p2;
else
return 0;
}
秀丽江山 发表于 2015-3-25 13:58
你代码怎么那么长啊???我晕死。要是递归那么长何必用递归呢,,,不如用for循环还好看点
我就是个笨人呀,才写这么长 :cry 仰望天上的光 发表于 2015-3-25 14:14
2楼代码不正确,如果在main中第二次调用strcmp2会出错,因为你用了static int i
有道理啊。。。没想这么多,反正只是比较一次。。。 仰望天上的光 发表于 2015-3-25 14:14
2楼代码不正确,如果在main中第二次调用strcmp2会出错,因为你用了static int i
我又写了一个。。去掉了那个static int; 现在应该可以了
#include<stdio.h>
int strcmp2(char p1[],char p2[]);
int main()
{
int i;
char s1,s2;
scanf("%s",s1);
fflush(stdin);
scanf("%s",s2);
i=strcmp2(s1,s2);
printf("%d\n",i);
return 0;
}
int strcmp2(char p1[],char p2[])
{
if(*p1=='\0'&&*p2=='\0')
return 0;
else if(*p1 != *p2)
return *p1-*p2;
else
return strcmp2((p1+1),(p2+1));
} 仰望天上的光 发表于 2015-3-25 14:14
2楼代码不正确,如果在main中第二次调用strcmp2会出错,因为你用了static int i
再看了下你的。。。我改写的和你一模一样。。。 仰望天上的光 发表于 2015-3-25 14:14
2楼代码不正确,如果在main中第二次调用strcmp2会出错,因为你用了static int i
代码好简单呀,学习了 :handshake
页:
[1]