С++ для начинающих



         

Обрабатываем знаки препинания - часть 2


        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"




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