Удаление из текстового файла букв "а" - C (СИ)
Формулировка задачи:
Тема: Работа с файлами
Помогите написать программу удаления из текстового файла букв "а" (и верхн., и нижн. регистра)
Решение задачи: «Удаление из текстового файла букв "а"»
textual
Листинг программы
#include <stdio.h>
char* func(char* str) {
char* p;
int offs = 0;
for (p = str; *p; ++p) {
*(p - offs) = *p;
offs += (*p == 'A') || (*p == 'a');
}
*(p - offs) = 0;
return str;
}
int main() {
char text[] = "My name is Andrew";
printf("%s\n", func(text));
return 0;
}
Объяснение кода листинга программы
В данном коде реализована функция func, которая принимает в качестве аргумента указатель на строку символов (строку) и возвращает новую строку, в которой удалены все символы а (как в верхнем, так и в нижнем регистре).
Список изменений, которые происходят в коде:
- В функции
funcсоздается указательp, который будет использоваться для итерации по исходной строке. - Создается целочисленная переменная
offs, которая будет использоваться для отслеживания смещения в новой строке. - Происходит итерация по исходной строке. На каждой итерации символ, на который указывает указатель
p, копируется в новую строку (в стек) с помощью оператора*(*p - offs) = *p;. - Значение переменной
offsувеличивается на единицу каждый раз, когда текущий символ равена(как в верхнем, так и в нижнем регистре). - После завершения итерации по исходной строке, последнему символу новой строки присваивается нулевой символ, чтобы завершить новую строку.
- Функция возвращает новую строку.
- В функции
mainсоздается массив символовMy name is Andrew. - Вызывается функция
funcс аргументомtext. - Результат функции
funcвыводится на консоль с помощью функцииprintf. - Программа завершается.