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