Замена подряд идущих одинаковых символов на заданный - 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);
}