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


Работа со строкой


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


//------------------------------------------------------bk34-01.cpp


// Удаление лишних пробелов при посимвольном переписывании


&#35include &#60stdio.h&#62
void nospace(c1[],c2[])
{
int i,j;
for (j=0,i=0;c1[i]!=0;i++) // Посимвольный просмотр строки


{
if (c1[i]!=' ') // Текущий символ не пробел


{
if (i!=0 &#38&#38 c1[i-1]==' ') // Первый в слове -


c2[j++]=' '; // добавить пробел


c2[j++]=c1[i]; // Перенести символ слова


} // в выходную строку


}
c2[j]=0;
}

Заметим, что контекст c1[j++]= имеет вполне определенный смысл : добавить к выходной строке очередной символ и переместиться к следующему.

Рассмотрим еще один пример поиск СЛОВА МАКСИМАЛЬНОЙ ДЛИНЫ. Несмотря на ярко выраженный " словный" характер алгоритма его можно реализовать путем посимвольного просмотра. Для этого можно использовать принцип, уже реализованный ранее при определении максимальной длины последовательности возрастающих значений. Достаточно использовать счетчик, который увеличивает свое значение на каждый символ слова и сбрасывает его при обнаружении пробела. Дополнительно в момент сбрасывания счетчика фиксируется его максимальное значение, а также индекс начала слова.


//------------------------------------------------------bk34-02.cpp




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