gpt4 book ai didi

c - 按字母顺序对字符串列表进行排序 (C)

转载 作者:太空宇宙 更新时间:2023-11-04 01:00:57 25 4
gpt4 key购买 nike

好的,这是我的问题。一位老师必须随机选择一名学生(从她手下的学生中)以获得最终分数的特殊奖励,为了做到这一点,她将编号为 1 到 N 的 N 张纸放在一个袋子里,并随机选择一个数字 K ;获奖学生是学生名单中的第K名学生。问题是老师不知道哪个数字对应哪个学生,因为她丢失了包含此信息的纸。她所知道的:所有学生的名字,以及他们的编号,从1到N,是按照字母顺序分配的。

所以我需要获取作为输入给出的一组姓名,按字母顺序对它们进行排序,然后提供获得特别奖金的学生的姓名,但我在这样做时遇到了麻烦。我写的程序命令除了第一个以外的所有名字。

另外,我用Code::Blocks运行项目时出现如下警告:

  • (第 16 行)ISO C90 禁止数组可变长度 's' [-Wvla]
  • (第 13 行)ISO C90 禁止混合声明和代码 [-Wpedantic]

请告诉我我在这里做错了什么,如果没有指定数量的名称,是否有更好的方法对名称进行排序。

注意:当 N 和 K 为零时,程序应该停止读取输入。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int n, k, i, j=0, aux, numMenorNome;
char str[]="zzzzzzzzzzzzzzzzzzzz", str2[]="zwyxzzzzzzzzzzzzzzzz";

do
{
scanf("%d%d", &n, &k);
struct student
{
char nome[21]; /*name*/
char nomes_ordenados[21]; /*array to put the names already sorted*/
} s[n];

for (i=0; i<n; i++)
{
scanf(" %s", s[i].nome);
}

for (i=0; i<n; i++)
{
aux = strcmp(str, s[i].nome); /*compares the string that would be the last in the alphabetical order ("zzzzzzzzzzzzzzzzzzzz") with the given names*/
if(aux>0)
{
strcpy(str, s[i].nome); /*it gives me the name that comes first in alphabetical order */
numMenorNome = i; /* identification number of the name that was obtained */
}
if (i==(n-1))
{
strcpy(s[j].nomes_ordenados,str);
printf("%s\n", s[j].nomes_ordenados);
strcpy(str, "zzzzzzzzzzzzzzzzzzzz");
strcpy(s[numMenorNome].nome, str2);
j++;
i=0; /* restarts the loop in order to obtain the second name in alphabetical order, the third name, the fourth name and so on */
if(j==n)
break;
}
}
printf("%s\n\n", s[k-1].nomes_ordenados);

} while (n!=0&&k!=0);
return 0;
}

最佳答案

对字符串数组进行排序非常简单。只需使用 qsort 和现有的比较函数(即 strcmp)

例子:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define NAMES 5
#define NAME_LEN 10

void print_names(char names[][NAME_LEN])
{
int i;
for(i=0; i<NAMES; ++i)
{
printf("%s\n", names[i]);
}
}

int main(void) {
char names[NAMES][NAME_LEN] = { "xxx", "uuu", "ccc", "aaa", "bbb" };

print_names(names);
printf("---------------------------------\n");

qsort(names, NAMES, NAME_LEN, strcmp);

print_names(names);

return 0;
}

关于c - 按字母顺序对字符串列表进行排序 (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40033310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com