Программирование >>  Инициализация объектов класса, структура 

1 ... 88 89 90 [ 91 ] 92 93 94 ... 395


typedef pair<short,short> location; typedef vector<location> loc; typedef vector<string> text; typedef pair<text* ,loc*> text loc;

text loc*

separate words( const vector<string> *text file )

words: содержит набор слов locations: содержит информацию о строке и позиции

каждого слова vector<string> *words = new vector<string>; vector<location> * locations = new vector<location>;

short line pos = 0; текущий номер строки

iterate through each line of text

for ( ; line pos < text file->size(); ++line pos )

textline: обрабатываемая строка

word pos: позиция в строке

short word pos = 0;

string textline = (*text file) [ line pos ];

string::size type pos = 0, prev pos = 0;

while (( pos = textline.find first of( , pos )) != string::npos )

сохраним слово words->push back(

textline.substr( prev pos, pos - prev pos ));

сохраним информацию о его строке и позиции locations->push back(

make pair( line pos, word pos ));

сместим позицию для следующей итерации ++word pos; prev pos = ++pos;

обработаем последнее слово words->push back(

textline.substr( prev pos, pos - prev pos ));

locations->push back(

make pair( line pos, word pos ));

return new text loc( words, locations );

int main() {

vector<string> *text file = retrieve text(); text loc *text locations = separate words( text file );

...

Теперь функция main() выглядит следующим образом:



textline: Alice Emma has long flowing red hair. Her Daddy

says

eol: 52 pos: 5 line: 0 word: 0 substring: Alice

eol: 52 pos: 10 line: 0 word: 1 substring: Emma

eol: 52 pos: 14 line: 0 word: 2 substring: has

eol: 52 pos: 19 line: 0 word: 3 substring: long

eol: 52 pos: 27 line: 0 word: 4 substring: flowing

onl R9 глпс- -l lino- n wnv-H- Ц anbc-l-V--1 nr. v-oH

eol: 52 pos: 31 line: 0 word: 5 substring: red

eol: 52 pos: 37 line: 0 word: 6 substring: hair

eol: 52 pos: 41 line: 0 word: 7 substring: Her

eol: 52 pos: 47 line: 0 word: 8 substring: Daddy last word on line substring: says

textline: magical but untamed. Daddy, shush, there is no such thing,

eol: 60 pos: 7 line: 3 word: 0 substring: magical eol: 60 pos: 11 line: 3 word: 1 substring: but eol: 60 pos: 20 line: 3 word: 2 substring: untamed eol: 60 pos: 28 line: 3 word: 3 substring: Daddy, eol: 60 pos: 35 line: 3 word: 4 substring: shush, eol: 60 pos: 41 line: 3 word: 5 substring: there eol: 60 pos: 44 line: 3 word: 6 substring: is eol: 60 pos: 47 line: 3 word: 7 substring: no eol: 60 pos: 52 line: 3 word: 8 substring: such last word on line substring: thing, :

textline: Shy1y, she asks, I mean, Daddy: is there?

eol: 43 pos: 6 line: 5 word: 0 substring: Shyly,

eol: 43 pos: 10 line: 5 word: 1 substring: she

eol: 43 pos: 16 line: 5 word: 2 substring: asks,

eol: 43 pos: 19 line: 5 word: 3 substring: I

eol: 43 pos: 25 line: 5 word: 4 substring: mean,

eol: 43 pos: 32 line: 5 word: 5 substring: Daddy,

eol: 43 pos: 35 line: 5 word: 6 substring: is last word on line substring: there? :

Прежде чем продолжить реализацию поисковой системы, вкратце рассмотрим оставшиеся функции-члены класса string, предназначенные для поиска. Функция

string river( lssissippi string::size type first pos

= river.find( is );

rfind() ищет последнее, т.е. самое правое, вхождение указанной подстроки:

string::size type 1ast pos = river.rfind( is );

find() вернет 1, указывая позицию первого вхождения подстроки is , а rfind() - 4 (позиция последнего вхождения is ).

find first not of() ищет первый символ, не содержащийся в строке, переданной как параметр. Например, чтобы найти первый символ, не являющийся цифрой, можно написать:

Вот часть распечатки, выданной тестовой версией separate words() :



string elems( 0123456789 );

string dept code( 03714p3 );

dept code( 03714p3 возвращается позиция символа p

string::size type pos = dept code.find first not of(elems) ;

find last of() ищет последнее вхождение одного из указанных символов. find last not of() - последний символ, не совпадающий ни с одним из заданных. Все эти функции имеют второй необязательный параметр - позицию в исходной строке, с которой начинается поиск.

Упражнение 6.13

Напишите программу, которая ищет в строке

[ ab2c3d7R4E6

цифры, а затем буквы, используя сначала find first of() , а потом find first not of() .

Упражнение 6.14

Напишите программу, которая подсчитывает все слова и определяет самое длинное и

string linel = We were her pride of 10 she named us - ; string line2 = Benjamin, Phoenix, the Prodigal string line3 = and perspicacious pacific Suzanne ;

самое короткое из них в строке sentence:

string sentence = linel + line2 + line3;

Если несколько слов имеют длину, равную максимальной или минимальной, учтите их все.

6.9. Обрабатываем знаки препинания

После того как мы разбили каждую строку на слова, необходимо избавиться от знаков препинания. Пока из строки

i magical but untamed. Daddy, shush, there is no such thing,

у нас получился такой набор слов:

magical

untamed.

Daddy,

shush,



1 ... 88 89 90 [ 91 ] 92 93 94 ... 395

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика