Информатика и технология программирования

         

Последовательное переписывание вложенных фрагментов


Основная программа. Переписать из входной строки вложенные друг в друга фрагменты последовательно друг за другом, оставляя при исключении фрагмента на его месте уникальный номер.


Пример : a{b{c}b}a{d{e{g}e}d}a =&#62 {c}{b1b}{g}{e3e}{d4d}a2a5a


//---------------------------------------------------------------------
// Окончательный вариант
//----------------------------------------------------------------------
int find(char c[])
{
int i; // Индекс в строке
int b; // Индекс максимальной " {"
for (i=0, b=-1; c[i]!=0; i++)
{
if (c[i]== } ) return b;
if (c[i]== { ) b=i;
}
return b;
}
void copy(char c1[], char c2[])
{
int i=0; // Индекс в выходной строке
int k; // Индекс найденного фрагмента
int n; // Запоминание начала фрагмента
int m; // Счетчик фрагментов
for (m=1; (k=find(c1))!=-1; m++)
{
for (n=k; c1[k]!= } ; k++, i++) c2[i]=c1[k];
c2[i++] = c1[k++];
if (m/10!=0) c1[n++] = m/10 + 0 ;
c1[n++] = m%10 + 0 ;
for (;c1[k]!=0; k++, n++) c1[n]=c1[k];
c1[n]=0;
}
for (k=0; c1[k]!=0; k++, i++) c2[i]=c1[k];
c2[i]=0;
}



Содержание раздела