Составить процедуру сжатия исходной последовательности символов - 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;
}

Объяснение кода листинга программы

  1. Подключение стандартной библиотеки файлов для работы с устройствами ввода-вывода
  2. Объявление переменной типа int, которая содержит код завершения программы
  3. Объявление массива символов, который содержит исходную последовательность символов
  4. Объявление указателя на первый символ в массиве символов
  5. Объявление указателя на временный указатель, который используется в цикле
  6. Объявление переменной типа ptrdiff_t, которая используется для хранения количества одинаковых символов
  7. Установка начального значения счётчика в 0
  8. Начало цикла, который проходит по каждому символу в исходной последовательности
  9. В каждой итерации цикла создаётся временный указатель, который указывает на текущий символ
  10. В каждой итерации цикла происходит проверка, является ли текущий символ таким же, как и предыдущий
  11. Если текущий символ не равен предыдущему, то выполняется следующая итерация цикла
  12. Если текущий символ равен предыдущему, то увеличивается указатель на текущий символ
  13. Если количество одинаковых символов больше 3, то добавляется запись в итоговую последовательность с указанием текущего символа и его количества
  14. Если количество одинаковых символов меньше или равно 3, то добавляется запись в итоговую последовательность с указанием символа и его количества
  15. Завершение цикла и вывод итоговой последовательности символов
  16. Возврат 0, что означает успешное завершение программы
  17. Включение стандартного вывода на экран
  18. Ввод исходной последовательности символов в консоль
  19. Запуск программы из командной строки
  20. Получение результата выполнения программы

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4 из 5
Похожие ответы