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


Работа со строкой - часть 2



// Поиск слова максимальной длины посимвольная обработка


// Функция возвращает индекс начала слова или 1, если нет слов


int find(char s[])
{
int i,n,lmax,imax;
for (i=0,n=0,lmax=0,imax=-1; s[i]!=0; i++)
{
if (s[i]!=' ') n++; // символ слова увеличить счетчик


else // перед сбросом счетчика


{ // фиксация максимального значения


if (n &#62 lmax) { lmax=n; imax=i-n; }
n=0;
}
} // то же самое для последнего слова


if (n &#62 lmax) { lmax=n; imax=i-n; }
return imax;
}

Такая форма представления программы позволяет одним циклом " убить всех зайцев" , но не является наглядной. В другой версии ПОСЛОВНОЙ ОБРАБОТКИ ТЕКСТА циклов больше, то есть имеются " архитектурные излишества" , зато структура программы отражает в полной мере сущность алгоритма.


//------------------------------------------------------bk34-03.cpp


// Поиск слова максимальной длины пословная обработка


// Функция возвращает индекс начала слова или 1, если нет слов


int find(char in[])
{
int i=0, k, m, b;
b=-1;
m=0;
while (in[i]!=0) // Цикл пословного просмотра строки


{
while (in[i]==' ') i++; // Пропуск пробелов перед словом


for (k=0;in[i]!=' ' &#38&#38 in[i]!=0; i++,k++); // Подсчет длины слова


if (k&#62m)
{
m=k;
b=i-k;
}
}
return b;
}

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


//------------------------------------------------------bk34-04.cpp


// Сортировка слов в строке в порядке убывания (выбором)


void sort(char in[], char out[])
{
int i,k;
i=0;
while((k=find(in))!=-1) // Получить индекс очередного слова


{
for (; in[k]!=' ' &#38&#38 in[k]!=0; i++,k++)
{ // Переписать с затиранием


out[i]=in[k]; in[k]=' ';
}
out[i++]=' '; // После слова добавить пробел


}
out[i]=0;
}




Начало  Назад  Вперед



Книжный магазин