Проблема с одномерным массивом.
Добавлено: 10 ноя 2009, 00:39
Вроде теоретически массивы понимаю - ничего сложного. Но на практике выходит какая-то ересь.
Есть частично заполненный массив типа char.
Цель: функция, удаляющая одинаковые вхождения символов и сдвигающая последующие элементы.
Теоретически понимаю, что сделать, на практике алгоритм не получается реализовать.
Теория следующая:
- Для поставленной задачи используем еще один массив (b), такого же размера, где первый элемент совпадает с первым элементом массива a. В него будут записываться вхождения без повторов.
- Сравниваем элемент массива a[0] с каждым элементом до a[size-1].
- Если элементы не совпадают, то записываем их в массив b[index] (index = 1), после чего index++.
- Если элементы совпадают, то запись в массив b не производится, а size массива b уменьшаем на 1.
В итоге, если изначально массив a[] = {a, b, a, c}, то на выходе b[] = {a, b, c}.
Я явно что-то упустил или чего-то не понял, но у меня получилось что-то вроде такого:
В итоге выходит бред: b_index1 = 9, элементы массива b представляют собой a b c a c b c b a. Т.е. не то, что надо.
Дальше начинаю экспериментировать (это неправильно, нужно понимать что делаешь) и прихожу к вообще странным результатам, но никак не к тому, что требуется.
Где я допустил ошибку? Не туда начал думать и как следствие реализовывать?
Есть частично заполненный массив типа char.
Цель: функция, удаляющая одинаковые вхождения символов и сдвигающая последующие элементы.
Теоретически понимаю, что сделать, на практике алгоритм не получается реализовать.
Теория следующая:
- Для поставленной задачи используем еще один массив (b), такого же размера, где первый элемент совпадает с первым элементом массива a. В него будут записываться вхождения без повторов.
- Сравниваем элемент массива a[0] с каждым элементом до a[size-1].
- Если элементы не совпадают, то записываем их в массив b[index] (index = 1), после чего index++.
- Если элементы совпадают, то запись в массив b не производится, а size массива b уменьшаем на 1.
В итоге, если изначально массив a[] = {a, b, a, c}, то на выходе b[] = {a, b, c}.
Я явно что-то упустил или чего-то не понял, но у меня получилось что-то вроде такого:
Код: Выделить всё
void del{char a[], int size)
{//size = 4;
char b[size];
int a_index1, a_index2, b_index1 = 1, b_total = size;
b[0] = a[0]
for(a_index1 = 0; a_index < size; a_index1++)
{//сравниваем поочередно каждый элемент массива 'a' с остальными элементами.
for(a_index2 = 1; a_index2 < size; a_index2++)
{
if(a[a_index1] != a[a_index2]
{
b[b_index1] = a[a_index2];
b_index1++;
}
}
}
}
Дальше начинаю экспериментировать (это неправильно, нужно понимать что делаешь) и прихожу к вообще странным результатам, но никак не к тому, что требуется.
Где я допустил ошибку? Не туда начал думать и как следствие реализовывать?