2015-04-09 3 views
0

Я не могу найти ответ, который я ищу. Я работаю над проектом, который предусматривает создание двух массивов. Один хранит строку, другой - номер (имя и возраст). Я должен печатать массивы, однажды в том порядке, в котором они введены, и один раз в алфавитном порядке. Я могу в алфавитном порядке просто отлично, но я не могу получить возраст, чтобы соответствовать правильному имени. Есть ли способ присвоить массиву тот же индекс, что и другой массив в C?присвоение двух разных массивов одного и того же индекса в c

+7

Как насчет использования структуры? –

+1

Вы уже узнали о типах 'struct'? Если да, используйте его. Если нет, скажите так. Это означает, что при сортировке приходится работать больше. –

+0

Вы должны либо использовать структуры, как показано, либо использовать один массив в качестве значений «ключ», но выполнять одни и те же шаги перестановки для обоих массивов при сортировке. – Segmented

ответ

1

Объявите-структуру, как это:

struct person 
{ 
    char name[30]; 
    int age; 
}; 

Объявляем массив так:

struct person record[2]; 

использовать его как это (пример):

strcpy(record[0].name, "Raju"); 
record[0].age = 24; 

Теперь record[0] имеет как имя и возраст. Когда вы сортируете, они останутся вместе.

+0

Я не показывал сортировку или печать массивов, но кажется, что вы можете справиться с этим. Если нет, я могу добавить больше ответа. – DigitalNinja

0

Предполагая, что массив строк является 2d-матрицей, где каждая строка содержит строку имени, и если вы хотите разделить два массива, затем создайте третий массив индексов и отсортируйте третий массив в соответствии с массивом имен. Затем отобразите имена и возрасты, используя третий массив индексов.

Если массив строк является массивом указателей на строки, вы можете создать массив индикаторов массива указателей на строки, а затем отсортировать этот массив индексов в соответствии со строками, а затем использовать отсортированные индексы для отображения два массива в отсортированном порядке.

Если вы используете функцию сортировки, где вы предоставляете функцию сравнения, тогда создайте массив указателей на массив имен (указатель [i] = & names [i]), отсортируйте указатели в соответствии с именами и преобразуйте указатели на индексы с использованием вычитания указателя (index = pointer [i] - & name [0]).

Смежные вопросы