如何给字符串排序?
发布网友
发布时间:2022-04-23 23:08
我来回答
共3个回答
热心网友
时间:2023-10-13 03:39
结构体 * 弄个结构体数组 ...............
方法一 结构体数组排序
/////////////////////////////////////////
// C-Free 4.1
// MinGW 3.4.5
// veket的小号
/////////////////////////////////////////
#include <stdio.h>
#include <string.h>
typedef struct data
{
char s[4];
int x;
int y;
}DATA;
int main()
{
DATA d[3];
DATA temp;
int i;
int j;
strcpy(d[0].s, "ASD");
d[0].x = 25;
d[0].y = 4;
strcpy(d[1].s, "ZXC");
d[1].x = 36;
d[1].y = 9;
strcpy(d[2].s, "QWE");
d[2].x = 10;
d[2].y = 2;
printf("Array before sort:\n");
for(i=0;i<3;i++)
{
printf("%s\t%d\t%d\n", d[i].s, d[i].x, d[i].y);
}
for(i=0;i<2;i++)
{
for(j=i+1;j<3;j++)
{
if(d[i].x<d[j].x)
{
strcpy(temp.s, d[i].s);
temp.x = d[i].x;
temp.y = d[i].y;
strcpy(d[i].s, d[j].s);
d[i].x = d[j].x;
d[i].y = d[j].y;
strcpy(d[j].s, temp.s);
d[j].x = temp.x;
d[j].y = temp.y;
}
}
}
printf("\n\nArray after sort:\n");
for(i=0;i<3;i++)
{
printf("%s\t%d\t%d\n", d[i].s, d[i].x, d[i].y);
}
return 0;
}
方法二 结构体不排序 建个指针数组 每个元素 依次指向 结构体数组的元素
然后 对指针数组 进行排序
#include <stdio.h>
#include <string.h>
typedef struct data
{
char s[4];
int x;
int y;
}DATA;
int main()
{
DATA d[3];
DATA *p[3];
DATA *temp;
int i;
int j;
strcpy(d[0].s, "ASD");
d[0].x = 25;
d[0].y = 4;
strcpy(d[1].s, "ZXC");
d[1].x = 36;
d[1].y = 9;
strcpy(d[2].s, "QWE");
d[2].x = 10;
d[2].y = 2;
printf("Array before sort:\n");
for(i=0;i<3;i++)
{
p[i] = &d[i];
printf("%s\t%d\t%d\n", p[i]->s, p[i]->x, p[i]->y);
}
for(i=0;i<2;i++)
{
for(j=i+1;j<3;j++)
{
if(p[i]->x<p[j]->x)
{
temp = p[i];
p[i] = p[j];
p[j] = temp;
}
}
}
printf("\n\nArray after sort:\n");
for(i=0;i<3;i++)
{
printf("%s\t%d\t%d\n", p[i]->s, p[i]->x, p[i]->y);
}
return 0;
}
热心网友
时间:2023-10-13 03:39
结构体必须的。
二楼不对吧,如果光用字符串是不行的,因为scanf不支持空格输入,有空格的话会将它分成3个数组的 。在不知道最后数据有多少位的时候,提取后面的数字可能出错。
而且那种方法没有结构体省事。
热心网友
时间:2023-10-13 03:39
很简单
不用结构体 二维字符串就可以搞定··
用sscanf提取后面的数字 将之存入int数组
对数组排序 然后二维字符串按照int数组顺序输出