Замена подряд идущих одинаковых символов на заданный - C (СИ)

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

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

Составить программу которая заменяет любое количество одинаковых символов, которые идут друг за другом подряд но такой же символ и цифру, которая соответствует количеству удаленных символов.(Начальный ряд вводить с клавиатуры; полученную строку выводить под начальной)
Листинг программы
  1. var s:string;i,k:byte;
  2. begin
  3. write('s = ');readln(s);
  4. writeln(s);
  5. i:=length(s);
  6. while 2<=i do
  7. begin
  8. k:=1;
  9. while (i>1)and(s[i]=s[i-1]) do begin dec(i);inc(k) end;
  10. if k>1 then begin delete(s,i+1,k-1);insert(inttostr(k-1),s,i+1) end;
  11. dec(i)
  12. end;
  13. writeln(s)
  14. end.
есть код на паскале, но как в Си сделать?

Решение задачи: «Замена подряд идущих одинаковых символов на заданный»

textual
Листинг программы
  1. #include <stdio.h>
  2. static int int_to_str(char* d, int n);
  3. char* str_pack_rep(char* s);
  4.  
  5.  
  6. int main(void){
  7.     char s[256] = "(AAZZZZMMMMM)BBBBBBB {CCCCCCCCCCCCCC}-WW\n"\
  8.                   "DDDDDDD, [EEEEEEEEEE] XXXXXXXXXXXXXXX-OO\n"\
  9.                   "||||||||||############................\n";
  10. /*
  11.     printf("Enter str: ");
  12.     fgets(s, sizeof(s), stdin);
  13.     fflush(stdin);
  14. */
  15.     puts(s);
  16.     puts( str_pack_rep(s) );
  17.     getchar();
  18.     return 0;
  19. }
  20.  
  21. //упаковка повторений
  22. char* str_pack_rep(char* s){
  23.     char  b[9];
  24.     int   n, i;
  25.     char* p, *q, *k, *t = s;
  26.     while(*s && (*s != *(s + 1)))
  27.         ++s;
  28.  
  29.     for(p = s; *s; *s = *p){
  30.         q = p;
  31.         while(*q && (*q == *p))
  32.             ++q;
  33.  
  34.         n = (int)(q - p);
  35.         if(n > 1){
  36.             i    = int_to_str(b, n - 1);
  37.             *s++ = *p++;
  38.             for(k = &b[0]; *k; *s++ = *k++)
  39.                 ;
  40.             p = q;
  41.             continue;
  42.         } else
  43.             ++s;
  44.         ++p;
  45.     }
  46.     return t;
  47. }
  48.  
  49. //преобразование числа в строку
  50. static int int_to_str(char* d, int n){
  51.     char* p, c, *q, *t = d;
  52.     do {
  53.         *d++ = (char)(n % 10) + '0';
  54.     } while((n /= 10) != 0);
  55.     *d = '\0';
  56.  
  57.     if(d != t){
  58.         for(p = t, q = d - 1; p < q; ++p, --q){
  59.             c  = *p;
  60.             *p = *q;
  61.             *q = c;
  62.         }
  63.     }
  64.     return (int)(d - t);
  65. }

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


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

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

6   голосов , оценка 3.5 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы