需要帮助在C中创建并行数组吗

需要帮助在C中创建并行数组吗,c,arrays,string,C,Arrays,String,只是一个免责声明:当涉及到C编程时,我是一个彻头彻尾的傻瓜,这可能会让人难堪,但我自己想不出来,也没有发现任何其他有用的东西。无论如何,下面的这个程序应该把名字(姓、首)和年龄放入数组,然后按字母顺序排列。我遇到的问题是创建一种并行数组,在按字母顺序排序后,将年龄与其各自的名称进行匹配。有人有什么建议吗?我曾考虑以某种方式将年龄数组绑定到我定义的函数中,但我仍然无法理解这一点。提前谢谢 #include <stdio.h> #include <string.h> #def

只是一个免责声明:当涉及到C编程时,我是一个彻头彻尾的傻瓜,这可能会让人难堪,但我自己想不出来,也没有发现任何其他有用的东西。无论如何,下面的这个程序应该把名字(姓、首)和年龄放入数组,然后按字母顺序排列。我遇到的问题是创建一种并行数组,在按字母顺序排序后,将年龄与其各自的名称进行匹配。有人有什么建议吗?我曾考虑以某种方式将年龄数组绑定到我定义的函数中,但我仍然无法理解这一点。提前谢谢

#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]]