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

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


string sieveChars: public:

Создание строки длиной 50 и заполнение ее символов

значениями Р (сокращение от Prime, то есть простое число )

SieveTestO : sieveChars(50. Р) {}

void runO {

fi ndPrimesO:

testPrimesO:

bool isPrime(int p) { if (p == 0 II p -= 1) return false: int root = int(sqrt(double(p))): for (int i = 2: i <= root: ++i) if (p X i ==0) return false: return true:

void findPrimesO { По определению числа О и 1 не являются простыми. Заменяем зти элементы символами N . SieveChars.replасе(О, 2. NN ): Перебор массива: size t sieveSize = sieveChars.sizeO: int root = int(sqrt(double(sieveSize))): for (int i =2: i <- root: ++i) Поиск всех кратных чисел: for (size t factor = 2: factor * i < sieveSize: ++factor) sieveChars[factor * i] = N;

void testPrimesO { size t i = SieveChars.find(P): while (i != string::npos) {

test (isPrime(i++)):

i = SieveChars.find(P. i):

i = sieveChars.find first not of(P): while (i != string::npos) {

test (!isPrime(i++)):

i = sieveChars.find first not of(P. i);

lendif SIEVE H /:-

: C03:Sieve.cpp {L} ../TestSuite/Test linclude ../TestSuite/Test.h #include Sieve.h

int mainO { SieveTest t; t.runO;

return t.reportO: } /:-

Функция find() перебирает содержимое string в прямом направлении; с ее помощью можно найти все вхождения символа или группы символов. Функция find first not of() ищет символы или подстроки, не соответствующие заданному критерию.



В классе string не предусмотрены функции для изменения регистра символов, однако такие функции легко реализуются на базе стандартных библиотечных функций toupper() и tolower() языка С, изменяющих регистр отдельного символа. В следующем примере продемонстрирован поиск без учета регистра:

: C03:F1nd.h

#ifndef FINO H

Idefine FIND H

Unci ude <cctype>

#i nclude <cstddef>

#1 nclude <string>

#include ../TestSuite/Test.h

using std::si2e t:

using std::string:

using std::tolower:

using std::toupper:

Создание копии s в верхнем регистре string upperCaseCconst strings s) { string upper(s):

for(size t i = 0: i < s.lengthO: ++i)

upper[i] = toupper(upper[i]): return upper:

Создание копии s в нижнем регистре string lowerCaseCconst strings s) { string lower(s):

for(size t i = 0: i < s.lengthO: ++i)

lower[i] = tolower(lower[i]): return lower:

class FindTest : public TestSuite::Test {

string chooseOne: public:

FindTestO : chooseOneCEenie. Meenie. Miney. Mo ) {} void testUpperO {

string upper = upperCase(chooseOne):

const string LOWER = abcdefghijklmnopqrstuvwxyz :

test (upper.find first of(LOWER) == string::npos): }

void testLowerO { string lower = 1owerCase(chooseOne): const string UPPER = ABCOEFGHIJKLMNOPQRSTUVWXYZ : test (lower.find first of(UPPER) == string::npos):

void testSearchO { Поиск с учетом регистра size t i = ChooseOne.find( een ): testji ==8): Поиск в нижнем регистре: string test = lowerCase(chooseOne); i = test.find( een ): testji ==0): i = test.find( een . ++i): test (i ==8): i = test.find( een . ++i): test (i == string::npos):



Поиск в верхнем регистре

test = upperCase(chooseOne):

1 = test.findCEEN ):

testji ==0):

1 = test.findCEEN .

testji ==8):

i = test.findCEEN . ++i):

test (i == string::npos):

void runO { testUpperO: testLowerO: testSearchO:

lendif FINO H III:-

II: C03:Find.cpp

{L} ../TestSuite/Test

linclude Find.h

linclude ../TestSuite/Test.h

int mainO { FindTest t: t.runO:

return t.reportO: } III:-

Функции UpperCaseO и lowerCase() работают no одному принципу: они создают копию своего аргумента типа string с измененным регистром символов. Программа Find.срр не лучшим образом решает проблему изменения регистра, и мы вернемся к sToii проблеме, когда будем рассматривать сравнения строковых объектов.

Поиск в обратном направлении

Если поиск в строке требуется выполнять от конца к началу (чтобы искать данные от последнего вхождения к первому ), воспользуйтесь функцией rfind():

: C03:Rparse.h

lifndef RPARSEJ

Idefine RPARSE H

linclude <cstddef>

#include <string>

linclude <vector>

iinclude ../TestSuite/Test.h

using std::Size t:

using std::string:

using std::vector:

class RparseTest : public TestSuite::Test { Вектор для хранения слов: vector<string> strings: public: void parseForOataO { Символы : являются ограничителями string s( now.:sense:make:to:going:is:This ): Последний элемент строки: int last = s.SizeO:



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

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