В тексте заменить букву, если она стоит на четной позиции - C (СИ)
Формулировка задачи:
В каждом слове текста заменить "а" на букву "е", если "а" стоит на четном месте, и заменить букву "р" на "ак", если "р" стоит на нечетном месте.
Решение задачи: «В тексте заменить букву, если она стоит на четной позиции»
textual
Листинг программы
#include <stdbool.h>
#include <string.h>
#include <stdio.h>
#define BUF_SIZE 80
char buf[BUF_SIZE];
int main(int argc, char* argv[])
{
const char* text = "jlkasjfpakgsdkljgpappajapapapaap";
buf[0] = '\0'; // насильно нуль-терминируем буфер
int buf_used = 1; // сколько буфера использовано, учитывая нулевой символ
bool odd = false;
char c;
while( c = *text++ ) {
odd = !odd;
if( odd && c == 'p' ) {
buf_used += 2; // length of "ak"
if( buf_used > BUF_SIZE ) break;
strcat(buf, "ak");
continue;
}
if ( !odd && c == 'a' ) {
buf_used += 1; // length of "e"
if( buf_used > BUF_SIZE ) break;
strcat(buf, "e");
continue;
}
*(buf + buf_used - 1) = c;
*(buf + buf_used) = '\0';
buf_used += 1;
}
puts(buf);
return 0;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с строками и файловым вводом-выводом
- Определяем размер буфера в 80 символов
- Инициализируем буфер как пустую строку, добавляя нулевой символ для корректной работы с C-стилем строками
- Инициализируем переменную, отслеживающую количество использованных символов в буфере (с учетом нулевого символа)
- Инициализируем переменную, отслеживающую четность текущего обрабатываемого символа
- Входим в цикл, который будет обрабатывать каждый символ входной строки
- Обновляем значение переменной, отслеживающей четность текущего обрабатываемого символа
- Если текущий символ - 'p' и текущий индекс в буфере четный, то добавляем в буфер строку
ak, увеличивая при этом использованное количество символов в буфере на 2 - Если текущий символ - 'a' и текущий индекс в буфере нечетный, то добавляем в буфер строку
e, увеличивая при этом использованное количество символов в буфере на 1 - Если текущий символ не является 'p' или 'a', то добавляем его в буфер, увеличивая при этом использованное количество символов в буфере на 1
- Проверяем, не превышает ли использованное количество символов размер буфера
- Если превышает, то выходим из цикла
- Выводим содержимое буфера на экран
- Возвращаем 0, что означает успешный конец работы программы