Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Лафоре Р. -> "Объектно-ориентированное программирование в С++" -> 114

Объектно-ориентированное программирование в С++ - Лафоре Р.

Лафоре Р. Объектно-ориентированное программирование в С++ — М.: Питер, 2004. — 992 c.
Скачать (прямая ссылка): obektnoorentprogramm2004.djvu
Предыдущая << 1 .. 108 109 110 111 112 113 < 114 > 115 116 117 118 119 120 .. 341 >> Следующая


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

Мы начали с объекта si, содержащего в себе строку «Все хорошо, прекрасная маркиза». После замены вывод программы SSTRCHNG будет таким:

si: Приветствую/прекрасная/принцесса

Сравнение объектов класса string

Можно использовать перегруженные операции или метод compare() для сравнения объектов класса string. Задача состоит в том, чтобы определить, являются ли строки идентичными или какая из них предшествует другой в алфавитном порядке. в программе SSTRCom показаны некоторые возможности.

// sstrcom.cpp // сравнение строк #include <iostream> #include <string> using namespace std: ///////////////////////////////////////////////////////////

int main ( ) {

string aName = "Иван": string userName:

cout « "Введите Ваше имя: ";

сіп » userName;

if ( userName == aName )

cout « "Привет. Иван\п": else if ( userName < aName )

cout « "Ваше имя идет до имени Иван\п": else

cout « "Ваше имя идет после имени Иван\п":

int п = userName.compare ( 0. 2. aName. О, 2 ); cout « "Первые две буквы Вашего имени "; if ( п == 0 )

cout « "совпадают "; else if ( n < 0 )

cout « "идут до ": else

cout « "идут после ": 302

Глава 7. Массивы и строки

cout « aName.substr С 0, 2 ) « endl; return 0:

J

В первой части программы операции == и < используются для определения того, является ли написанное пользователем имя идентичным имени Иван или оно предшествует или следует за ним в алфавитном порядке. Во второй части программы метод compare() сравнивает только первые две буквы слова «Иван» с первыми двумя буквами имени, напечатанного пользователем (userName). Аргументами этой версии метода compare() являются начальная позиция userName, число символов, которые надо сравнить, строка, используемая для сравнения (aName), а также начальная позиция и количество символов в строке aName. Вот пример взаимодействия с программой SSTRC0M:

Введите Ваше имя: Алексей

Ваше имя идет до имени Иван

Первые две буквы Вашего имени идут до Ив

Первые две буквы имени «Иван» получают, используя метод substr(). Он возвращает фрагмент строки, для которой метод был вызван. Его первый аргумент — это позиция фрагмента, а второй — количество символов.

Доступ к символам в объектах класса string

Доступ к отдельным символам объектов класса string вы можете получить разными способами. В нашем следующем примере мы покажем доступ с использованием метода at(). Вы можете также использовать перегруженную операцию [ ], которая позволяет рассматривать объект класса string как массив. Однако операция [ ] не предупредит вас, если вы попытаетесь получить доступ к символу, лежащему за пределами массива (например, после конца строки). Операция [ ] ведет себя здесь так, как обращается с настоящим массивом, и это более эффективно. Но это может привести к тяжелым для диагностики программным ошибкам. Безопасней использовать метод at(), который остановит программу, если вы используете индекс, не входящий в допустимые границы. (Есть одно исключение, и мы обсудим его в главе 14 «Шаблоны и исключения».)

// sstrchar.cpp

// доступ к символам в строке

!include <iostream>

!include <string>

using namespace std:

///////////////////////////////////////////////////////////

int main ( ) {

char charray [ 80 ]: string word;

cout « "Введите слово: ": сіп » word:

int wlen = word.length (): // длина строки Массивы строк 303

cout « "По одному символу: ": for ( int j = 0; j < wlen; j++ ) cout « word.at ( j ); // тут будет проверка на выход за пределы строки

// cout « word [ j ]; // а тут проверки не будет

word.copy ( charray. wlen, О ); // копируем строку в массив charray [ wlen ] = 0;

cout « "ХпМассив содержит: " « charray « endl; return 0:

}

В этой программе мы использовали метод at() для вывода содержимого объекта класса string символ за символом. Аргумент метода at() — это местонахождение символа в строке.

Затем мы показали, как вы можете использовать метод сору() для копирования объекта класса string в массив типа char, эффективно преобразовывая его в строковый тип. Вслед за копированием, после последнего символа строки должен быть вставлен нулевой символ ('\0') для завершения преобразования к строковому типу. Метод length() класса string возвращает то же число, что и метод size(). Приведем вывод программы SSTRCHAR:

Введите слово: симбиоз По одному символу: симбиоз Массив содержит: симбиоз

(Вы можете также преобразовать объект класса string к строковому типу, используя методы c_str() или data(). Однако для использования этих методов вам нужно изучить указатели, которые мы рассмотрим в главе 10.)

Другие методы класса string

Мы видели, что методы size() и IengthQ возвращают число символов сгроки объекта класса string. Количество памяти, занятое строкой, обычно больше, чем в действительности это необходимо. (Хотя если строка не была инициализирована, то она использует для символов 0 байтов.) Метод capacity() возвращает действительное количество занятой памяти. Вы можете добавлять символы в строку, не добавляя памяти в нее до тех пор, пока этот лимит не будет исчерпан. Метод max_size() возвращает максимально возможный размер объекта класса string. Это количество будет на три байта меньше, чем максимальное значение переменной типа int в вашей системе. В 32-битной Windows системе это 4 294 967 293 байта, но размер памяти будет, возможно, ограничен этим количеством.
Предыдущая << 1 .. 108 109 110 111 112 113 < 114 > 115 116 117 118 119 120 .. 341 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100