0 / 0 / 1
Регистрация: 11.02.2015
Сообщений: 14
1

Работа со структурами через указатели

20.05.2015, 10:47. Показов 833. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую, форумчане. Не могу разобраться в следующем: есть массив структур. В структуре два элемента: строка и переменная, которая говорит о том, нужно удалять этот элемент массива или нет (если равна 1, то удалять, если 0, то нет). Не могу понять, как сделать все это через структуры. Обычным образом я бы попытался решить вот так (но это неправильно, т.к. нужно убирать элемент строки целиком, а не части структуры в отдельности):
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
typedef struct { char *word; int del; }   t_struct;
 
void del_eq(t_struct arr[], int n)
{
    int i = 0, j = n;
 
    while (arr[i].word != NULL)
    {
        while (arr[i].del == 0)
            i++;
        if (arr[j].del == 0)
        {
            while (arr[j].del == 1)
            {
                arr[j].word = NULL;
                arr[j].del = NULL;
                j--;
            }
            arr[i].del = 0;
            arr[i].word = arr[j].word;
            arr[j].word = NULL;
            arr[j].del = NULL;
        }
    }
 
}
Но как это реализовать через указатели? Нужно именно через них. Литературу читал. Не разобрался. Помогите, пожалуйста.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.05.2015, 10:47
Ответы с готовыми решениями:

Работа с массивом через пользовательские функции через указатели
Не хочет работать ( Выводит только последний элемент массива ) Help! #include <iostream> using...

Указатели, работа с динамическими структурами данных и динамические списки, стеки
1)Указатели, работа с динамическими структурами данных. Динамическое управление памятью...

Работа с переменными, строками, структурами через PROGMEM
Здравствуйте уважаемые. Решил разобраться, как данные записывать и считывать в флешь, с помощью...

Работа с объектом через указатели
Всем привет, возникла необходимость работы с многочисленными объектами и их структурами - код...

2
6044 / 2159 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
20.05.2015, 10:56 2
Опишите, что должна делать данная функция вообще. Как можно точнее.
0
0 / 0 / 1
Регистрация: 11.02.2015
Сообщений: 14
20.05.2015, 15:22  [ТС] 3
Изначально вводятся слова в этот массив структур. В массиве n элементов. Число вводимых слов меньше либо равно n. Необходимо удалить слова с одинаковой мощностью. Для того, чтобы определить, нужно их удалять или нет используется часть структуры del. 1 в ней означает необходимость удаления. 0 - сохранение элемента.
Все это я сделал. Осталось только поудалять. И здесь у меня загвоздка. Сама идея удаления вот в чем:
Проходим массив структур сверху до первого элемента, который нужно удалить (назовем его A). Потом идем снизу, если сразу подряд идут элементы, подлежащие удалению, то удаляем. Как только натыкаемся на элемент, который не надо удалять (назовем его B), берем его, копируем на место элемента A. Потом продолжаем тоже самое, то уже не от начала массива, а от элементов A и B.
Надеюсь, более/менее понятно описал.
Сделать нужно обязательно с указателями, а как, я не знаю.

Добавлено через 1 час 24 минуты
Не могу отредактировать первое сообщение.
Вот рабочий код. Все, что мне нужно, это не выполнять присваивания NULL, а именно удалять ненужные строки, чтобы вместо них в памяти был мусор (как, например, при объявлении переменной).
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
typedef struct { char *word; int del; }   t_struct;
 
void del_eq(t_struct arr[], int n)
{
    int i = 0, j = (n-1);
 
    while ((arr[i].word != NULL) && (i < n))
    {
        while (arr[i].del == 0)
            i++;
 
        while (arr[j].del == 1)
        {
            arr[j].word = NULL;
            arr[j].del = NULL;
            j--;
        }
        if (arr[i].del ==1)
        {
            arr[i].del = 0;
            arr[i].word = arr[j].word;
            arr[j].word = NULL;
            arr[j].del = NULL;
            j--;
        }
    }
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.05.2015, 15:22
Помогаю со студенческими работами здесь

Работа с массивом через указатели
Приветствую всех, форумчане! Проблемка у меня с данным кодом в следующем: что-то с указателями я...

Работа со строками через указатели
прошу,помогите! нужно написать следующие программы,используя указатели: 1ЧАСТЬ :::: обьявить 2...

Работа с массивами через указатели
прошу,помогите! нужно написать следующую программу,используя указатели: ввести целочисленный...

Работа с динамической памятью через указатели.
Пишу в Microsoft Visual Studio -&gt;Win32 Console application -&gt;C++. Есть такая задача: Создать...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru