Простое использование 2 индексов, один для чтения и один для записи. @ Carl Norum
void strdel(char array[], char c) {
int read_index = 0;
int write_index = 0;
while (array[read_index] != '\0') {
if (array[read_index] != c) {
array[write_index] = array[read_index];
write_index++; // Only advance write_index when a character is copied
}
read_index++; // Always advance read_index
}
array[write_index] = '\0';
}
Имеет производительность O (n), намного быстрее, чем использование вложенных циклов for()
, что составляет O (n * n).
Подробности:
OP: Кстати, помните, мне не разрешено использовать указатели для этой функции.
Обратите внимание, что array
in void strdel(char array[], char c)
- указатель, даже если он может выглядеть как массив.
int
для индексации массива - это нормально для ученика и большого количества кода, но лучше использовать size_t
.int
может не хватать необходимого диапазона.Тип size_t
- это тип без знака, который не является ни слишком узким, ни слишком широким для индексации массива.Это становится важным для очень длинных строк .