读书人

,帮忙修改下c语言的字符排序处理

发布时间: 2012-03-13 11:21:11 作者: rapoo

紧急求助,帮忙修改下c语言的字符排序处理
帮忙修改下啊,大虾.....
紧急求助...
s[]这样分配内存:
s[i]=(char*)malloc(5*sizeof(char));

下面对这个排序:
void sorts(char*s[],int num)
{
char *mk;
printf("begin\n");
int nm;
nm=num-1;
mk=(char *)malloc(5*sizeof(char));
int i,j;
printf("for begin %d\n",nm);
for (i=0;i<=nm;i++)
{
for(j=0;j<=nm;j++)
{
int ru;
ru=strcmp(s[j],s[i]);
printf(" look ru=%d\n",ru);
if (ru<0)
{
strcpy(mk,s[j]);
strcpy(s[j],s[i]);
strcpy(s[i],mk);
printf("%s\n",s[j]);
printf("%s\n",s[i]);
}
}
}
}

[解决办法]

C/C++ code
#include<stdlib.h>#include<string.h>#include<stdio.h>int compare(const void*p1,const void* p2){    return strcmp( * ( char** ) p1, * ( char** ) p2  );}int main(){    int x=0;    char* sz[]={"222","111","444","000"};    qsort( (void*)sz ,4 ,4 , compare );    for(x=0;x<4;x++){        printf("%s\n",sz[x]);    }    return 0;}
[解决办法]
void sorts(char*s[],int num)//--->void sorts(char (*s)[5],int num)
{
char *mk;
printf("begin\n");
int nm;
nm=num-1;
mk=(char *)malloc(5*sizeof(char));
int i,j;
printf("for begin %d\n",nm);
for (i=0;i <=nm;i++)
{
for(j=0;j <=nm;j++)
{
int ru;
ru=strcmp(s[j],s[i]);
printf(" look ru=%d\n",ru);
if (ru <0)
{
strcpy(mk,s[j]);
strcpy(s[j],s[i]);
strcpy(s[i],mk);
printf("%s\n",s[j]);
printf("%s\n",s[i]);
}
}
}
//added
free(mk);
mk = NULL;
}
[解决办法]
改成这样:
char *s[5];
for (int i=0;i <5;i++)
{
printf("请输入第%d个学生号\n",i);
s[i]=(char*)malloc(sizeof(char));
scanf("%s",s[i]);
}

读书人网 >C语言

热点推荐