我用递归写了一个双分支的函数,但实际上只需得到一个 return 值即可,不需要执行另一条,求教如何实现
#include<stdio.h>#include<string.h>
int compare(char *a,char*b)
{
if(!strcmp(a,b)) return 0;
int i,flag=0,k;
for(i=0;i<(strlen(a)<strlen(b)?strlen(a):strlen(b));i++)
{
if(a[i]>b[i])
{ k=0;flag=1;return k;}
if(a[i]<b[i])
{ k=1;flag=1;return k;}
}
if(flag!=1) //(这里出了问题)得到我的目的后,可它又执行了|
{ |
if(strlen(a)>strlen(b)) 《-----比如说我只要执行 /
{ /
for(i=0;i<strlen(b);i++) /
a[i]=a[i+strlen(b)]; /
compare(a,b); /
} /
if(strlen(a)<strlen(b)) 《- - - - - - - - - - -- - - -- - /
{
for(i=0;i<strlen(a);i++)
b[i]=b[i+strlen(b)];
compare(a,b);
}
}
}
void sort(char a[][20],int N)
{
int s,i,j,k;
for(i=0;i<N;i++)
{
char b[100]="",str1[100]="";
k=i;
strcpy(str1,a[k]);
for(j=i+1;j<N;j++)
{
char str2[100]="";
strcpy(str2,a[j]);
if(compare(str1,str2))
{ k=j;
strcpy(str1,a[k]);
}
}
if(k!=i)
{
strcpy(b,a[i]);
strcpy(a[i],a[k]);
strcpy(a[k],b);
}
}
}
int main()
{
//freopen("a.txt","r",stdin);
int N;
while(scanf("%d",&N)!=EOF)
{
if(N==0) break;
char a[20][20]={};
getchar();
int i,j;
for(i=0;i<N;i++)
{
j=0;
while(1)
{
scanf("%c",&a[i][j]);
if(a[i][j]==' '||a[i][j]=='\n')
break;
j++;
}
a[i][j]='\0';
}
sort(a,N);
for(i=0;i<N;i++)
puts(a[i]);
// printf("%s",a[i]);
printf("\n");
}
return 0;
}
推荐测试数据:3
321 32 3
[ 本帖最后由 windthenrain 于 2014-12-6 19:05 编辑 ]