Удалить из символьного массива все двойные символы - C (СИ)
Формулировка задачи:
Задан символьный массив размера N. Удалить из массива все двойные символы (два одинаковых символа являются соседями). Какой логикой или порядком выполнения пользоваться?
Решение задачи: «Удалить из символьного массива все двойные символы»
textual
Листинг программы
#include <stdio.h>
void print(int a[], unsigned n) {
while (n--) {
printf("%d ", *a++);
}
printf("\n");
}
unsigned pack(int a[], unsigned n) {
unsigned offs = 0, i;
for (i = 1; i < n; ++i) {
if (a[i - 1] == a[i]) {
offs++;
}
else {
a[i - offs] = a[i];
}
}
return n - offs;
}
int main() {
int a[] = {0, 1, 1, 2, 3, 3, 4, 5, 5, 6, 7, 7, 8, 9, 9};
unsigned n = sizeof(a) / sizeof(*a);
print(a, n);
n = pack(a, n);
print(a, n);
return 0;
}
Объяснение кода листинга программы
В этом коде представлена функция pack, которая удаляет все пары одинаковых символов из символьного массива. Функция print используется для печати массива до и после удаления пар одинаковых символов.
Список действий:
- Инициализировать переменную
offsсо значением 0 и переменнуюiсо значением 1. - Начать цикл
for, который будет проходить по всем элементам массива, начиная со второго элемента. - Проверить, равен ли текущий элемент предыдущему. Если да, то увеличить значение переменной
offsна 1. - Если текущий элемент не равен предыдущему, то переместить значение текущего элемента в позицию
i - offs. - Продолжать цикл до тех пор, пока не будет достигнут последний элемент массива.
- Вернуть значение
n - offs, которое будет представлять новое количество элементов в массиве после удаления пар одинаковых символов. - Вызвать функцию
printдля печати массива до удаления пар одинаковых символов. - Вызвать функцию
packдля удаления пар одинаковых символов из массива. - Вызвать функцию
printдля печати массива после удаления пар одинаковых символов. - Вернуть 0, чтобы указать, что программа успешно завершилась.