Замена подряд идущих одинаковых символов на заданный - 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); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д