需要帮助在C中创建并行数组吗
只是一个免责声明:当涉及到C编程时,我是一个彻头彻尾的傻瓜,这可能会让人难堪,但我自己想不出来,也没有发现任何其他有用的东西。无论如何,下面的这个程序应该把名字(姓、首)和年龄放入数组,然后按字母顺序排列。我遇到的问题是创建一种并行数组,在按字母顺序排序后,将年龄与其各自的名称进行匹配。有人有什么建议吗?我曾考虑以某种方式将年龄数组绑定到我定义的函数中,但我仍然无法理解这一点。提前谢谢需要帮助在C中创建并行数组吗,c,arrays,string,C,Arrays,String,只是一个免责声明:当涉及到C编程时,我是一个彻头彻尾的傻瓜,这可能会让人难堪,但我自己想不出来,也没有发现任何其他有用的东西。无论如何,下面的这个程序应该把名字(姓、首)和年龄放入数组,然后按字母顺序排列。我遇到的问题是创建一种并行数组,在按字母顺序排序后,将年龄与其各自的名称进行匹配。有人有什么建议吗?我曾考虑以某种方式将年龄数组绑定到我定义的函数中,但我仍然无法理解这一点。提前谢谢 #include <stdio.h> #include <string.h> #def
#include <stdio.h>
#include <string.h>
#define NAME_LENGTH 50
#define MAX_NAMES 50
int alpha_first(char *list[], int min_sub, int max_sub);
void select_sort_str(char *list[], int n);
int
main(void)
{
int i = 0;
int numpeople;
char names[MAX_NAMES][NAME_LENGTH] = { 0 };
char ages[MAX_NAMES][NAME_LENGTH] = { 0 };
char skip_line;
char *alpha[MAX_NAMES] = { 0 };
printf("Enter number of people <0..50>\n> ");
scanf("%d", &numpeople);
do
{
scanf("%c", &skip_line);
}
while (skip_line != '\n');
for(i = 0; i < numpeople; ++i)
{
printf("Enter name %d (lastname, firstname) ", i+1);
gets(names[i]);
printf("Enter age %d: ", i+1);
gets(ages[i]);
}
for(i = 0; i < numpeople; ++i)
{
alpha[i] = names[i];
select_sort_str(alpha, numpeople);
}
printf("\n\n%-30s\n\n", "Original List");
for (i = 0; i < numpeople; ++i)
printf("%-30s\n", names[i]);
printf("\n\n%-30s\n\n", "Alphabetical Order");
for (i = 0; i < numpeople; ++i)
printf("%-30s\n", alpha[i]);
return 0;
}
int
alpha_first(char *list[],
int min_sub, int max_sub)
{
int first, i;
first = min_sub;
for (i = min_sub + 1; i <= max_sub; ++i)
if (strcmp(list[i], list[first]) < 0)
first = i;
return (first);
}
void
select_sort_str(char *list[], int n)
{
int fill, index_of_min;
char *temp;
for (fill=0; fill<n-1; ++fill)
{
index_of_min = alpha_first(list, fill, n - 1);
if (index_of_min != fill)
{
temp = list[index_of_min];
list[index_of_min] = list[fill];
list[fill] = temp;
}
}
}
#包括
#包括
#定义名称\u长度50
#定义最多50个名称
int alpha_first(字符*列表[],int min_sub,int max_sub);
void select_sort_str(字符*列表[],int n);
int
主(空)
{
int i=0;
人民内部;
字符名称[最大名称][名称长度]={0};
字符数[最大名称][名称长度]={0};
字符跳转线;
char*alpha[MAX_NAMES]={0};
printf(“输入人数”\n>”;
scanf(“%d”和“numpeople”);
做
{
scanf(“%c”,跳过行(&U);
}
while(跳过行!='\n');
对于(i=0;i
typedef struct
{
char *first_name;
char *last_name;
int age;
} person;
当你创建数组时,创建一个人
数组;创建一个新的人
,填写其字段,将其添加到数组中。现在你在一个漂亮的小程序包中拥有了所需的所有数据。计算机科学中的大多数问题都是通过引入额外的间接级别来解决的
在本例中,请注意,select\u sort\u str()
正在对字符串指针数组进行排序。相反,假设您构造一个索引值数组,初始化为0
。numpople-1
,然后将这些索引按相应名称的顺序进行排序。因此,在alpha\u first()中
,以及取char*list[]
让它也取int index[]
,比较变成:
if (strcmp(list[index[i]], list[index[first]]) < 0)
您需要创建并行数组吗?还是可以使用struct
s数组?
names[index[i]]