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



              

Выделение вложенных фрагментов - часть 2



//------------------------------------------------------bk34-11.cpp


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; // перенести остаток входной строки


}

Практический совет избегать сложные вычисления над индексами. Лучше всего для каждого фрагмента строки заводить свой индекс и перемещать их независимо друг от друга в нужные моменты. Что, например, сделано выше при " уплотнении" строки.




Содержание  Назад  Вперед