Форум программистов, компьютерный форум CyberForum.ru

Односвязный список превратить в массив структур - C++

Восстановить пароль Регистрация
 
Novichock123
1 / 1 / 0
Регистрация: 25.04.2015
Сообщений: 41
03.07.2015, 18:55     Односвязный список превратить в массив структур #1
Есть структура:
C++
1
2
3
4
5
6
struct StructWords
{
char Word[32];
char Name[32];
StructWords *Next, *Prev;
};
Создал односвязный список. Проверял нахождение в ней элементов - всё в порядке, всё на месте. Теперь надо перенести элементы из списка в массив структур.
C++
1
StructWords massiv[150];
Но проблема в том, что эта часть кода не функционирует
C++
1
2
3
4
5
6
7
8
9
StructWords *temp = Head;
        int i = 0;
        cout << "Теперь в массив структур!" << endl;
        while (temp)
        {
            strcpy(massiv[i].Word, temp->Word);
            temp = temp->Next;
            cout << ++i << "-ый элемент в структуре: " << massiv[i].Word << endl;
        }
Судя по всему, не работает strcpy, ибо прогоняет цикл ровно столько раз, сколько элементов в списке.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.07.2015, 18:55     Односвязный список превратить в массив структур
Посмотрите здесь:

C++ Как массив разнозначных чисел превратить в массив цифр? (С++)
C++ Заменить массив структур на динамический список
Односвязный список C++
Программа выводит неверный ответ (дан массив структур, содержащий сведения об успеваемости студентов - вывести список неуспевающих студентов) C++
Односвязный список C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Рыжий Лис
Просто Лис
 Аватар для Рыжий Лис
209 / 164 / 44
Регистрация: 17.05.2012
Сообщений: 611
Записей в блоге: 4
03.07.2015, 19:10     Односвязный список превратить в массив структур #2
C++
1
2
3
4
5
6
7
8
9
10
11
StructWords massiv[150];
StructWords *temp = Head;
        int i = 0;
        cout << "Теперь в массив структур!" << endl;
        while (temp)
        {
            strcpy(massiv[i].Word, temp->Word);
            temp = temp->Next;
            cout << i << "-ый элемент в структуре: " << massiv[i].Word << endl;
            i++;//<--
        }
Добавлено через 1 минуту
+
C++
1
strcpy(massiv[i].Name, temp->Name);
Novichock123
1 / 1 / 0
Регистрация: 25.04.2015
Сообщений: 41
03.07.2015, 19:33  [ТС]     Односвязный список превратить в массив структур #3
Одно и тоже.
По поводу i. Он у меня служит для показа индекса (понятное дело, что индекс массива в С++ начинается с нуля), только начинается он с единицы.
Соглашусь, забыл про Name.
А всё остальное осталось как прежде. strcpy не работает ни в какую.

Добавлено через 8 минут
strcpy_s тоже не работает.
Подправил код ради отладки:
C++
1
2
3
4
5
6
7
8
9
10
11
12
StructWords *temp = Head;
        int i = 0;
        cout << "Теперь в массиве структур!" << endl;
        while (temp)
        {
            strcpy(massiv[i].Word,temp->Word);
            strcpy(massiv[i].Name, temp->Name);
            i++;
            cout << i << "-ый элемент в списке структур: " << temp->Word << endl;
            temp = temp->Next;
            cout << i << "-ый элемент в массиве структур: " << massiv[i].Word << endl;
        }
temp->Word показывает значения, у massiv[i].Word - пусто.
Рыжий Лис
Просто Лис
 Аватар для Рыжий Лис
209 / 164 / 44
Регистрация: 17.05.2012
Сообщений: 611
Записей в блоге: 4
03.07.2015, 19:38     Односвязный список превратить в массив структур #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
StructWords *temp = Head;
        int i = 0;
        cout << "Теперь в массиве структур!" << endl;
        while (temp)
        {
            strcpy(massiv[i].Word,temp->Word);
            strcpy(massiv[i].Name, temp->Name);
            cout << (i+1) << "-ый элемент в списке структур: " << temp->Word << endl;
            cout << (i+1) << "-ый элемент в массиве структур: " << massiv[i].Word << endl;
            temp = temp->Next;
            i++;
        }
Novichock123
1 / 1 / 0
Регистрация: 25.04.2015
Сообщений: 41
03.07.2015, 19:50  [ТС]     Односвязный список превратить в массив структур #5
Я не понял каким образом, но подставив ваш код вместо моего - программа strcpy наконец-то признала. Спасибо.

Суть в другом, код почти такой же, ничего не поменялось как таковое, некоторые строчки местами поменяли и вдруг! сработало. Я, если честно, не понимаю, почему тогда программа не работала, а сейчас работает) Я хочу понять в чём дело, но не втыкаю
Рыжий Лис
Просто Лис
 Аватар для Рыжий Лис
209 / 164 / 44
Регистрация: 17.05.2012
Сообщений: 611
Записей в блоге: 4
03.07.2015, 19:58     Односвязный список превратить в массив структур #6
Ладно, возьмём пример i=0.
C++
1
2
3
4
5
6
7
            strcpy(massiv[0].Word,temp->Word);//копируем в 0-й элемент массива
            strcpy(massiv[0].Name, temp->Name);//тоже копируем
            //i++;
            cout << 1 << "-ый элемент в списке структур: " << temp->Word << endl;
            temp = temp->Next;
            cout << 1 << "-ый элемент в массиве структур: " << massiv[1].Word << endl;//ой
            //идёт обращение к 1 элементу, а не 0!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2015, 20:02     Односвязный список превратить в массив структур
Еще ссылки по теме:

C++ Односвязный список
Из текстового файла считать слова и превратить их в линейный список C++
C++ Массив структур: вывести список товаров, стоимость которых превышает 100 000 рублей

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Novichock123
1 / 1 / 0
Регистрация: 25.04.2015
Сообщений: 41
03.07.2015, 20:02  [ТС]     Односвязный список превратить в массив структур #7
Эвона как. Дурак я, что не заметил такой глупой оплошности.
Yandex
Объявления
03.07.2015, 20:02     Односвязный список превратить в массив структур
Ответ Создать тему
Опции темы

Текущее время: 08:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru