【发布时间】:2015-12-15 04:55:25
【问题描述】:
我有这个程序需要能够按字母等级对这个输入文件进行排序,每个都用制表符分隔。
Casanova 910017 A
Smith 934422 C
Jones 878766 B
Briggs 123456 D
Anderson 989420 A
但如果成绩相同,则需要按姓氏字母顺序排序。
Anderson 989420 A
Casanova 910017 A
Jones 878766 B
Smith 934422 C
Briggs 123456 D
我只是不知道该怎么做。 我尝试了其他几种我发现的算法,但都失败了,因为程序只在列表中显示了名字两次。
for(i = 1; i < 14; i++)
{
j = i - 1;
while( j >= 0 && strcmp( stu[j+1].last_name, stu[j].last_name ) < 0 )
{
temp = stu[j + 1];
stu[j+1] = stu[j];
stu[j] = temp;
j--;
}
printf("\n%s\n",stu[j].last_name);
}
展示
Casanova
Casanova
/
struct student
{
char last_name[25];
int stu_id;
char grade;
}a;
struct student temp, stu[100];
int main(void)
{
int n, i, cnt = 0;
char *name, *id, *grd,fgrade, data[2000];
int iid;
void *v;
while(!(fgets(data, 2000, stdin) == NULL))
{
name = strtok(data, "\t");
strcpy(stu[cnt].last_name, name);
id = strtok(NULL, "\t");
iid = atoi(id);
stu[cnt].stu_id = iid;
grd = strtok(NULL, "\n");
v = grd;
fgrade = *((char*) v);
//printf("%c\n", stu[cnt].last_name[0]);
stu[cnt].grade = fgrade;
//printf("\n%s %s %s cnt: %d last_nam = %s\n", name, id, grd, cnt, stu[cnt].last_name);
++cnt;
}
}
我在考虑一个 qsort,但我以前从未使用过。 输出需要按以下顺序:
Anderson 989420 A
Casanova 910017 A
Jones 878766 B
Smith 934422 C
Briggs 123456 D
【问题讨论】:
-
我在考虑一个 qsort,但我以前从未使用过。 你在正确的轨道上。在网上查找使用
qsort的示例。这并不难。 -
我建议您学习sorting algorithms 并了解它们的工作原理。
标签: c sorting numbers alphabetical alphabetical-sort