c语言字符串排序问题!

2025-01-07 03:57:08
推荐回答(5个)
回答1:

不用字符串函数。
本题的一个完整的c程序如下,程序在win-tc和Dev-c++下都调试通过。
#include
#include
#include
#define N 3/* 设定要输入的字符串个数,可更改 */

int cmp(char *p1,char *p2) /* 字符串比较函数 */
{int i=0;
while (*(p1+i)==*(p2+i))
if (*(p1+i++)=='\0') return 0; /* 这里是先判断*(p1+i)=='\0',然后再是i++ */
return (*(p1+i)-*(p2+i));
}

void sort(char *a[N]) /*排序函数*/
{char *temp;
int i,j;
for(i=0;ifor(j=i+1;jif(cmp(a[i],a[j])<0)
{temp=a[i];/* 交换的是字符串的地址,不是字符串的内容,可更改 */
a[i]=a[j];
a[j]=temp;
}
}
int main(void )
{int i;
char s[N][81],*p[N];/* 设定每个字符串不超过80字节 */
printf("Please input %d strings one by one:\n",N);
for(i=0;i{gets(s[i]);
p[i]=s[i];
}
sort(p);
printf("The sequence after sort is:\n");
for(i=0;iprintf("%s\n",p[i]);
getch();
return 0;
}

回答2:

main()
{
char st[100],cs[3][100]; //假设该字符串长度都在100个以内
int i,j,p;
printf("please input strings one by one:\n");
for(i=0;i<3;i++)
gets(cs[i]); //读取字符串,放在CS数组里面
printf("\n");
for(i=0;i<3;i++)
{ p=i;strcpy(st,cs[i]);//把CS数组中第i+1行的字符串拷贝给st数组
for(j=i+1;j<3;j++)
if(strcmp(cs[j],st)>0) {p=j;strcpy(st,cs[j]);}//把st(也就是CS〔i〕依次跟它后面的按照ASCII码顺序(strcmp)比较.CS〔j]大的话,就把它拷贝给st数组(也就是给ST数重赋值)。
if(p!=i) //如果p!=i的话,那么说明cs[i]的后面有一个cs[p]比它大
{
strcpy(st,cs[i]);
strcpy(cs[i],cs[p]);
strcpy(cs[p],st);
}//交换cs[i]和cs[p]的值,目的是把cs[p](ASCII码比较大的)的值放到前面,
puts(cs[i]);//输出cs[i],这个时候的cs[i]是跟在它后面的所有元素比较过的,它是在后面所有元素里面最大的。
} //3次循环,按从大到小分别3次输出cs[i]
printf("\n");
}

你要是想比较N个字符串的话,可以把里面的3改成N就行了。

回答3:

//---------------------------------------------------------------------------

#include
#include
#include

int cmp(const void *a,const void *b)
{
return strcmp((const char *)b,(const char *)a);
}
int main(void)
{
char a[80],b[80],c[80],*str[3];
int i;
str[0]=&a[0];
str[1]=&b[0];
str[2]=&c[0];
scanf("%s%s%s",str[0],str[1],str[2]);
i=strcmp(a,c);
qsort(str,3,sizeof(char *),cmp);

for (i = 0; i<3; i++) {
printf("%s\n",str[i]);
}
return 0;
}
//---------------------------------------------------------------------------

回答4:

#include
#include
void main()
{ int i,j;
char *t;
char *str[4]={"student","class","teacher","school"};
for(i=0;i<4;i++)
printf("%s\n",str[i]);
for(i=0;i<3;i++)
for(j=0;j<3-i;j++)
if(strcmp(str[j],str[j+1])>0)
{t=str[j];
str[j]=str[j+1];
str[j+1]=t;
}
printf("比较后\n");
for(i=0;i<4;i++)
printf("%s\n",str[i]);
}

回答5:

ssaammmmttoo规则是什么,ssaaoommmmtt,或ssaattoommmm类似的行不?