Составить процедуру сжатия исходной последовательности символов - C (СИ) (77892)

Узнай цену своей работы

Формулировка задачи:

составить процедуру сжатия исходной последовательности символов: каждая подпоследовательность состоящая из нескольких вхождений одного и того же символа заменяется на текст x(k), где x - символ, k - строка являющаяся записью числа вхождений символа х в исходную последовательность... последняя программа..понятия не имею как делать...помогите с процедуркой
#include <stdio.h>
#include <string.h>
 
int abai(char *str)
{
    int i=0,n=0;;
    char *p = NULL,*q = NULL;
    for(p =  strtok(str, " "); p; p = strtok(NULL, " "))
    for(i='a';i<'z';i++)
    {
       if (p[i]==i && p[i+1]==i)
 
       {
           n++;
           printf ("sokr :",p[i],"(",n,")");
       }
 
    }
    return 0;
}
 
void main()
{
char text[1000], *p=NULL;
 printf("Vvedite text: ");
 gets(text);
 
 abai(text);

}
накидал бред...логически неправильно..подскажите

Решение задачи: «Составить процедуру сжатия исходной последовательности символов»

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;
        offset += sprintf(buf + offset, cntr > 1 ? "%c(%d)" : "%c", *pTmp, cntr);
    }
    puts(buf);
    return 0;
}

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

Этот код сжимает строку, заменяя повторяющиеся символы их количеством в строке.

  1. Включает файл стандартного ввода/вывода .
  2. Объявляет массив символов str, содержащий исходную последовательность символов FFbbDD   DccccN.
  3. Объявляет массив символов buf, размером 256 символов, который будет использоваться для хранения сжатой последовательности символов.
  4. Объявляет указатель p на первый символ в str и указатель pTmp, который будет использоваться для временного хранения символов.
  5. Объявляет переменную cntr для подсчета количества повторяющихся символов.
  6. Объявляет переменную offset для отслеживания количества уже сжатых символов в buf.
  7. Начинает цикл while, который будет выполняться до тех пор, пока p не станет указателем на символ '\0' в str.
  8. Внутри цикла сохраняет текущий символ в pTmp.
  9. Начинает внутренний цикл while, который будет выполняться до тех пор, пока следующий символ в строке не будет отличаться от символа в pTmp.
  10. Увеличивает p на количество символов, которые повторяются.
  11. Увеличивает cntr на количество символов, которые повторяются.
  12. Добавляет количество символов и символ в buf с помощью функции sprintf.
  13. Если количество символов больше 1, то добавляет символ в buf.
  14. Завершает внутренний цикл while.
  15. Увеличивает offset на количество символов, которые были добавлены в buf.
  16. Завершает цикл while.
  17. Выводит сжатую последовательность символов в buf с помощью функции puts.
  18. Возвращает 0, чтобы указать, что программа успешно завершилась.
  19. Конец кода.

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


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

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

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