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

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

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

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

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

textual
Листинг программы
#include <stdio.h>
static int int_to_str(char* d, int n);
char* str_pack_rep(char* s);
 
 
int main(void){
    char s[256] = "(AAZZZZMMMMM)BBBBBBB {CCCCCCCCCCCCCC}-WW\n"\
                  "DDDDDDD, [EEEEEEEEEE] XXXXXXXXXXXXXXX-OO\n"\
                  "||||||||||############................\n";
/*
    printf("Enter str: ");
    fgets(s, sizeof(s), stdin);
    fflush(stdin);
*/
    puts(s);
    puts( str_pack_rep(s) );
    getchar();
    return 0;
}
 
//упаковка повторений
char* str_pack_rep(char* s){
    char  b[9];
    int   n, i;
    char* p, *q, *k, *t = s;
    while(*s && (*s != *(s + 1)))
        ++s;
 
    for(p = s; *s; *s = *p){
        q = p;
        while(*q && (*q == *p))
            ++q;
 
        n = (int)(q - p);
        if(n > 1){
            i    = int_to_str(b, n - 1);
            *s++ = *p++;
            for(k = &b[0]; *k; *s++ = *k++)
                ;
            p = q;
            continue;
        } else
            ++s;
        ++p;
    }
    return t;
}
 
//преобразование числа в строку
static int int_to_str(char* d, int n){
    char* p, c, *q, *t = d;
    do {
        *d++ = (char)(n % 10) + '0';
    } while((n /= 10) != 0);
    *d = '\0';
 
    if(d != t){
        for(p = t, q = d - 1; p < q; ++p, --q){
            c  = *p;
            *p = *q;
            *q = c;
        }
    }
    return (int)(d - t);
}

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


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

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

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