Составить процедуру сжатия исходной последовательности символов - 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, чтобы указать, что программа успешно завершилась.
- Конец кода.