Составить процедуру сжатия исходной последовательности символов - C (СИ) (75559)
Формулировка задачи:
составить процедуру сжатия исходной последовательности символов: каждая подпоследовательность состоящая из нескольких вхождений одного и того же символа заменяется на текст x(k), где x - символ, k - строка являющаяся записью числа вхождений символа х в исходную последовательность...
помогите исправить программу, чтобы программа делала замену только при к>3, а остальное сохраняло.
#include <stdio.h> int main() { char str[] = "FFbbDD DccccN", buf[256], *p = str, *pTmp = NULL; ptrdiff_t cntr, offset = 0; while(*p) { pTmp = p; while(*p == *pTmp) ++p; cntr = p - pTmp; offset += sprintf(buf + offset, cntr > 1 ? "%c(%d)" : "%c", *pTmp, cntr); } puts(buf); return 0; }
Решение задачи: «Составить процедуру сжатия исходной последовательности символов»
textual
Листинг программы
#include <stdio.h> int main() { char str[] = "FFbbDD DccccN", buf[256], *p = str, *pTmp = NULL; ptrdiff_t cntr, offset = 0; while (*p) { pTmp = p; while (*p == *pTmp) { ++p; } cntr = p - pTmp; if (cntr > 3) { offset += sprintf(buf + offset, "%c(%d)", *pTmp, cntr); } else { offset += sprintf(buf + offset, "%.*s", cntr, pTmp); } } puts(buf); return 0; }
Объяснение кода листинга программы
- Подключение стандартной библиотеки файлов для работы с устройствами ввода-вывода
- Объявление переменной типа int, которая содержит код завершения программы
- Объявление массива символов, который содержит исходную последовательность символов
- Объявление указателя на первый символ в массиве символов
- Объявление указателя на временный указатель, который используется в цикле
- Объявление переменной типа ptrdiff_t, которая используется для хранения количества одинаковых символов
- Установка начального значения счётчика в 0
- Начало цикла, который проходит по каждому символу в исходной последовательности
- В каждой итерации цикла создаётся временный указатель, который указывает на текущий символ
- В каждой итерации цикла происходит проверка, является ли текущий символ таким же, как и предыдущий
- Если текущий символ не равен предыдущему, то выполняется следующая итерация цикла
- Если текущий символ равен предыдущему, то увеличивается указатель на текущий символ
- Если количество одинаковых символов больше 3, то добавляется запись в итоговую последовательность с указанием текущего символа и его количества
- Если количество одинаковых символов меньше или равно 3, то добавляется запись в итоговую последовательность с указанием символа и его количества
- Завершение цикла и вывод итоговой последовательности символов
- Возврат 0, что означает успешное завершение программы
- Включение стандартного вывода на экран
- Ввод исходной последовательности символов в консоль
- Запуск программы из командной строки
- Получение результата выполнения программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д