6.9. Обрабатываем знаки препинания
6.9. Обрабатываем знаки препинания
После того как мы разбили каждую строку на слова, необходимо избавиться от знаков препинания. Пока из строки
magical but untamed. "Daddy, shush, there is no such thing,"
у нас получился такой набор слов:
magical
but
untamed.
"Daddy,
shush,
there
is
no
such
thing,"
Как нам теперь удалить ненужные знаки препинания? Для начала определим строку, содержащую все символы, которые мы хотим удалить:
string filt_elems( "",.;:!?)(\/" );
(Обратная косая черта указывает на то, что следующий за ней символ должен в данном контексте восприниматься буквально, а не как специальная величина. Так, " обозначает символ двойной кавычки, а не конец строки, а \ – символ обратной косой черты.)
Теперь можно применить функцию-член find_first_of() для поиска всех вхождений нежелательных символов:
while (( pos = word.find_first_of( filt_elems, pos ))
!= string::npos )
Найденный символ удаляется с помощью функции-члена erase():
word.erase(pos,1);
Первый аргумент этой функции означает позицию подстроки, а второй – ее длину. Мы удаляем один символ, находящийся в позиции pos. Второй аргумент является необязательным; если его опустить, будут удалены все символы от pos до конца строки.
Вот полный текст функции filter_text(). Она имеет два параметра: указатель на вектор строк, содержащий текст, и строку с символами, которые нужно убрать.
void
filter_text( vectorstring *words, string filter )
{
vectorstring::iterator iter = words-begin();
vectorstring::iterator iter_end = words-end();
// Если filter не задан, зададим его сами
if ( ! filter.size() )
filter.insert( 0, "".," );
while ( iter != iter_end ) {
string::size_type pos = 0;
// удалим каждый найденный элемент
while (( pos = (*iter).find_first_of( filter, pos ))
!= string::npos )
(*iter).erase(pos,1);
iter++;
}
}
Почему мы не увеличиваем значение pos на каждой итерации? Что было бы, если бы мы написали:
while (( pos = (*iter).find_first_of( filter, pos ))
!= string::npos )
{
(*iter).erase(pos,1);
++ pos; // неправильно...
}
Возьмем строку
thing,"
На первой итерации pos получит значение 5 , т.е. позиции, в которой находится запятая. После удаления запятой строка примет вид
thing"
Теперь в 5-й позиции стоит двойная кавычка. Если мы увеличим значение pos, то пропустим этот символ.
Так мы будем вызывать функцию filter_text():
string filt_elems( "",.;:!?)(\/" );
filter_text( text_locations-first, filt_elems );
А вот часть распечатки, сделанной тестовой версией filter_text():
filter_text: untamed.
found! : pos: 7.
after: untamed
filter_text: "Daddy,
found! : pos: 0.
after: Daddy,
found! : pos: 5.
after: Daddy
filter_text: thing,"
found! : pos: 5.
after: thing"
found! : pos: 5.
after: thing
filter_text: "I
found! : pos: 0.
after: I
filter_text: Daddy,
found! : pos: 5.
after: Daddy
filter_text: there?"
found! : pos: 5.
after: there"
found! : pos: 5.
after: there
Упражнение 6.15
Напишите программу, которая удаляет все символы, кроме STL из строки:
"/.+(STL).$1/"
используя сначала erase(pos,count), а затем erase(iter,iter).
Упражнение 6.16
Напишите программу, которая с помощью разных функций вставки из строк
string sentence( "kind of" );
string s1 ( "whistle" )
string s2 ( "pixie" )
составит предложение
"A whistling-dixie kind of walk"
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Зарегистрированные товарные знаки и торговые марки, а также патенты
Зарегистрированные товарные знаки и торговые марки, а также патенты Не все компании публикуют подобную информацию на своих сайтах. Некоторые ограничиваются тем, что ставят значок «ТМ» или «R» справа от своего названия. Иностранные организации предоставляют подробные
2.3.3. Обрабатываем
2.3.3. Обрабатываем Управлять письмами удобно через список писем какой-либо папки. Поскольку здесь мы имеем не одно письмо, то и управление предполагается групповое. Для начала отметим письма, над которыми хотим выполнить какое-либо действие. Действий несколько — группу
Adobe Photoshop: обрабатываем фотографии
Adobe Photoshop: обрабатываем фотографии Я не представляю себе работы без моей любимой программы Adobe Photoshop. Так что, если она у вас есть, — прекрасно! Если нет — постарайтесь установить. Я не буду рассказывать здесь обо всех возможностях программы, для этого понадобилась бы целая
§ 143. Знаки препинания в нестандартных ситуациях
§ 143. Знаки препинания в нестандартных ситуациях 27 октября 2007Текст часто бывает непослушным и некрасивым только оттого, что дизайнер не пользуется приемами нейтрализации. Одни из этих приемов требуют времени, другие — простого внимания. Сегодня поговорим о том, куда
Знаки препинания
Знаки препинания Конечно же, в этом разделе мы не будем говорить о том, что такое запятая или зачем нужен вопросительный знак. Все наши читатели ходили в школу и знакомы с правилами пунктуации (даже если не всегда их выполняют).К сожалению, теоретические знания – это одно,
Вместо букв отображаются непонятные знаки
Вместо букв отображаются непонятные знаки Если вместо букв на экране отображаются непонятные знаки, то причина этого может заключаться в следующем.• Скорее всего, в системе не установлен необходимый шрифт. Приобретите компакт-диск со шрифтами и установите их в папку
Скрытые знаки
Скрытые знаки Обычно страница текста в окне Word выглядит так же, как и на печати: буквы, цифры, пробелы, знаки препинания. Однако если в группе Абзац вкладки Главная нажать кнопку или сочетание клавиш Ctrl+*, то вид текста значительно изменится: появятся знаки, вроде бы только
Обрабатываем MP3-файлы
Обрабатываем MP3-файлы Tag & ename (http://www.softpointer.com/tr.htm)Лучшая программа для групповой обработки MP3-файлов – как водится, отечественного происхождения.Нетрудно догадаться, что создавалась эта утилита специально для операций с ID3-тэгами – специальными информационными полями
Знаки препинания
Знаки препинания Об особенностях характера человека можно судить и по стилю написания знаков препинания.Жирная точка (рис. 140) указывает на материальные устремления человека, одновременно она является признаком животных страстей.Робость, боязливость, сочетающиеся с
Проекционные знаки на воде для невнимательных австралийских водителей Николай Маслухин
Проекционные знаки на воде для невнимательных австралийских водителей Николай Маслухин Опубликовано 16 мая 2013 В австралийском городе Мельбурн, как и вообще в целом по стране, довольно хорошо с дорожной разметкой и знаками. Как правило, особо
Цифровые водяные знаки
Цифровые водяные знаки Эти изображения, предоставленные доктором Минервой Янг [Minerva M. Yeung] из IBM T. J. Watson Research Center, демонстрируют скрытие водяного знака в изображении таким образом, чтобы он оставался даже в случае повреждения изображения. В первом ряду показано
Знаки времени
Знаки времени Автор: Киви БердНа закате правления госадминистрации Клинтона один из видных деятелей ИТ-индустрии, глава Sun Microsystems Скотт Макнили сделал, помнится, весьма сильное публичное заявление, которым многие были просто шокированы. Речь шла о роли технологий в