Составить процедуру сжатия исходной последовательности символов - 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; }
Объяснение кода листинга программы
Этот код сжимает строку, заменяя повторяющиеся символы их количеством в строке.
- Включает файл стандартного ввода/вывода
. - Объявляет массив символов str, содержащий исходную последовательность символов
FFbbDD DccccN
. - Объявляет массив символов buf, размером 256 символов, который будет использоваться для хранения сжатой последовательности символов.
- Объявляет указатель p на первый символ в str и указатель pTmp, который будет использоваться для временного хранения символов.
- Объявляет переменную cntr для подсчета количества повторяющихся символов.
- Объявляет переменную offset для отслеживания количества уже сжатых символов в buf.
- Начинает цикл while, который будет выполняться до тех пор, пока p не станет указателем на символ '\0' в str.
- Внутри цикла сохраняет текущий символ в pTmp.
- Начинает внутренний цикл while, который будет выполняться до тех пор, пока следующий символ в строке не будет отличаться от символа в pTmp.
- Увеличивает p на количество символов, которые повторяются.
- Увеличивает cntr на количество символов, которые повторяются.
- Добавляет количество символов и символ в buf с помощью функции sprintf.
- Если количество символов больше 1, то добавляет символ в buf.
- Завершает внутренний цикл while.
- Увеличивает offset на количество символов, которые были добавлены в buf.
- Завершает цикл while.
- Выводит сжатую последовательность символов в buf с помощью функции puts.
- Возвращает 0, чтобы указать, что программа успешно завершилась.
- Конец кода.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д