Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
STL5 / lab2-string / lab2-string.doc
Скачиваний:
9
Добавлен:
10.04.2015
Размер:
177.66 Кб
Скачать

Поиск в строках

Класс stringсодержит большое количество перегруженных функций поиска подстрок и символов. Всегоstringсодержит шесть функции поиска и каждая из них перегружена, чтобы принимать в качестве аргументаstring,C-строку, массив символов и отдельный символ. Ниже приведены функции поиска, которые принимают в качестве параметраstring, описание остальных может быть найдено в литературе поC++:

template <class Ch, class Tr = char_traits<Ch>, class A = allocator<Ch> >

class std::basic_string

{

public:

size_type find(const basic_string& str, size_type pos = 0) const;

size_type rfind(const basic_string& str, size_type pos = 0) const;

size_type find_first_of(const basic_string& str,

size_type pos = 0) const;

size_type find_last_of(const basic_string& str,

size_type pos = npos) const;

size_type find_first_not_of(const basic_string& str,

size_type pos = 0) const;

size_type find_last_not_of(const basic_string& str,

size_type pos = npos) const;

};

find() – ищет в строке подстроку и возвращает позициюпервоговхождения подстроки или жеnposв случае отсутствия совпадений, поиск начинается с позиции заданнойpos.

rfind() – ищет в строке подстроку и возвращает позициюпоследнеговхождения подстроки или жеnposв случае отсутствия совпадений, поиск начинается с позиции заданнойpos.

find_first_off() – возвращает позициюпервоговхождения любого символа изstr, а в случае отсутствия совпадений возвращаетnpos, поиск начинается с позиции заданнойpos.

find_last_off() – возвращает позициюпоследнеговхождения любого символа изstr, а в случае отсутствия совпадений возвращаетnpos, поиск начинается с позиции заданнойpos.

find_first_not_off() – возвращает позициюпервоговхождения символа отличного от всех символов содержащихся вstr, а в случае отсутствия совпадений возвращаетnpos, поиск начинается с позиции заданнойpos.

find_last_not_off() – возвращает позициюпоследнеговхождения символа отличного от всех символов содержащихся вstr, а в случае отсутствия совпадений возвращаетnpos, поиск начинается с позиции заданнойpos.

Пример работы функций find() иrfind():

string MyString("This is example of find and rfind usage.");

string StringToSearch(“is”);

int result = MyString.find(StringToSearch);

// result = 2

int result = MyString.find(StringToSearch,4);

// result = 5

int result = MyString.rfind(StringToSearch);

// result = 5

int result = MyString.rfind(StringToSearch,10);

// result = npos

}

Рассмотрим работу find_first_not_off() иfind_last_not_off() на примере программы, удаляющей пропуски с обоих концов строки.

#include<string>

#include<iostream>

using namespace std;

string trim(const string &s)

{

if(s.length() == 0)

return s;

int begin, end;

// поиск первого вхождения не пробельного символа

// под пробельным символом понимается пробел, табуляция,

// символ новой строки

begin = s.find_first_not_of("\a\b\f\n\r\t\v ");

// поиск последнего вхождения не пробельного символа

end = s.find_last_not_of("\a\b\f\n\r\t\v ");

if ((begin == string::npos)

|| (end == string::npos))

return "";

// создадим результирующую строку как подстроку,

// на основе результатов поиска

return string(s, begin, end – begin + 1);

}

int main(int argc, char ** argv)

{

string MyString(" User Information ");

cout << “->” << MyString << “<-” << endl;

MyString = trim(MyString);

cout << “->” << MyString << “<-” << endl;

return 0;

}

Вывод программы:

-> User Information <-

->User Information<-

Соседние файлы в папке lab2-string