Программирование >>  Разработка устойчивых систем 

1 ... 24 25 26 [ 27 ] 28 29 30 ... 196


Алгоритмы подробно рассматриваются в главе 6.

const stnngS from, const strings to); #endif REPLACEALL H /:-

: C03:ReplaceAll.cpp {0} #incl ude <cstddef> #include ReplaceAll.h using namespace std;

strings replaceAlК strings context, const strings from, const strings to) { size t lookHere = 0; size t foundHere;

while ((foundHere = context.find(from. lookHere)) != string::npos) {

context.replace(foundHere. from.sizeO. to); lookHere = foundHere + to.sizeO;

return context; } III:-

Версия find(), использованная в этой программе, получает во втором аргументе начальную позицию поиска, и возвращает string::npos. Позицию, хранящуюся в переменной lookHere, важно сместить за строку замены на тот случай, если from является подстрокой to. Следующая программа предназначена для тестирования функции гер1асеА11():

: СОЗ:ReplaceAllTest.срр

{L} ReplaceAll

#include <cassert>

#include <iostream>

#include <string>

#include ReplaceAll.h

using namespace std:

int mainO {

string text = a man. a plan, a canal, panama ; replaceAlKtext, an , XXX ):

assert(text == a mXXX, a piXXX, a cXXXal. pXXXama );

} III:-

Как видите, класс string сам по себе не рещает все возможные задачи - во многих решениях приходится привлекать алгоритмы стандартной библиотеки, поскольку loiacc string может рассматриваться как контейнер STL (для чего используются итераторы, о которых говорилось выше). Все общие алгоритмы работают с интервалами элементов, хранящихся в контейнерах. Чаще всего используются интервалы от начала до конца контейнера . Объект string интерпретируется как контейнер с элементами-символами; начало интервала определяется итератором string::begin(), а конец интервала - итератором string::end(). Следующий пример демонстрирует применение алгоритма гер1асе() для замены всех вхождений символа X символом Y :

: C03:StringCharReplace.cpp #include <algorithm> #include <cassert> #include <string>



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

Функции группы find класса string предназначены для поиска символа или группы символов в заданной строке. Ниже перечислены функции группы find и область их применения.

using namespace std:

int mainO {

string sCaaaXaaaXXaaXXXaXXXXaaa ):

replace(s.begin(). s.endO. X, Y):

assertCs == aaaYaaaYYaaYYYaYYYYaaa ): } /:-

Обратите внимание: алгоритм replace() вызывается не как функция класса string(). Кроме того, в отличие от функций string::replace(), выполняющих только одну замену, алгоритм гер1асе() заменяет все вхождения одного символа другим символом.

Алгоритм гер1асе() работает только с отдельными объектами (в данном случае - с объектами char), он не может использоваться для замены символьных массивов или объектов string. Поскольку объект string ведет себя как контейнер STL, к нему могут применяться и другие алгоритмы. Это позволяет решать задачи, не решаемые напрямую функциями класса string.

Конкатенация с использованием перегруженных операторов

Многих программистов С при знакомстве с классом string языка С++ приятно удивляет простота объединения объектов string операторами + и +=. При использовании этих операторов синтаксис конкатенации строк напоминает суммирование числовых данных:

: C03:AddStrings.cpp #include <string> #include <cassert> using namespace std:

int mainO { string si( This ): string s2( That ): string s3( The other ): Конкатенация строк оператором + si = si + s2:

assert(sl == This That ):

Другой способ конкатенации строк

si += S3:

assert(sl == This That The other ):

В правой части может производиться индексирование строки

si += S3 + s3[4] + ooh lala :

assert(sl == This That The other The other oooh lala ): } /:-

Операторы + и += обеспечивают гибкие и удобные средства для объединения строковых данных. В правой части оператора может использоваться практически любой тип, интерпретируемый как один или несколько символов.



using std using std using std

:size t: :sqrt: : string:

class SieveTest : public TestSuite::Test {

findO

Ищет в строке заданный символ или группу символов. Возвращает начальную позицию первого найденного экземпляра или npos при отсутствии совпадений.

f1nd first of()

Ищет в строке и возвращает позицию первого символа, совпадающего с любым символом из заданной группы. При отсутствии совпадений возвращается npos.

f1nd last of()

Ищет в строке и возвращает позицию последнего символа, совпадающего с любым символом из заданной группы. При отсутствии совпадений возвращается npos.

find first not of()

Ищет в строке и возвращает позицию первого элемента, не совпадающего ни с одним из символов заданной группы. При отсутствии совпадений возвращается npos.

f1ndJast not of()

Ищет в строке и возвращает позицию последнего элемента, не совпадающего ни с одним из символов заданной группы. При отсутствии совпадений возвращается npos.

rfindO

Просматривает строку от конца к началу в поисках заданного символа или группы символов и возвращает начальную позицию совпадения. При отсутствии совпадений возвращается npos.

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

Следующая программа использует решето Эратосфена для поиска простых чисел, меньших 50. Этот алгоритм начинает с числа 2, помечает все числа, кратные 2, как непростые, и повторяет процесс для следующего кандидата в простые числа. Конструктор SieveTest инициализирует sieveChars, для чего он задает исходный размер символьного массива и записывает значение Р в каждый из его элементов.

: C03:S1eve.h

lifndef SIEVE H

Idefine SIEVE H

#1 nclude <cmath>

#1 nclude <cstddef>

#1 nclude <str1ng>

linclude ../TestSuite/Test.h



1 ... 24 25 26 [ 27 ] 28 29 30 ... 196

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