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

 

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

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

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


Для считывания строк, содержащих пробелы, мы используем другой метод — cin.get(). Этот синтаксис означает использовать метод get() класса stream для его объекта сіп. В следующем примере, BLANKSIN, показано, как это работает.

// blanksin.cpp // ввод строки с пробелами !include <iostrearrp-using namespace std: ///////////////////////////////////////////////////////////

int main ( )

{

const int MAX = 80: // максимальная длина строки char str [ MAX ]; // сама строка

cout « "\пВведите строну: ":

Ciп.get ( str. MAX ):

cout « "Вы ввели: " « str « endl:

return 0:

}

Первый аргумент метода cin::get() — это адрес массива, куда будет помещена введенная строка. Второй аргумент определяет максимальный размер массива, автоматически предупреждая, таким образом, его переполнение.

При использовании этого метода введенная строка сохранится полностью.

Введите строку: Что посеешь, то и пожнешь. Вы ввели: Что посеешь, то и пожнешь.

Проблемы могут возникнуть, если вы перепутаете метод cin.get() с операциями сіп и ». Мы обсудим использование метода ignore() класса сіп для устранения этой проблемы в главе 12 «Потоки и файлы».

Считывание нескольких строк

Мы смогли решить проблему считывания внутренних пробелов в строке, но как быть с несколькими строками? Оказывается, что метод cin::get() может иметь третий аргумент, который пригодится нам в этой ситуации. Этот аргумент определяет символ, на котором метод завершает считывание строки. Установленным по умолчанию значением этого аргумента является символ новой строки ('\п'), но если вы вызовете метод с другим аргументом, то это значение заменится на введенный вами символ.

В нашем следующем примере, LINESIN, мы вызовем метод cin::get() с символом доллара ('$') в качестве третьего аргумента:

// linesin.срр // ввод нескольких строк !include <iostream> using namespace std: Строки 289

const int MAX = 2000; // максимальная длина строки

char str [ MAX ]; // сама строка

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

int main ( ) {

cout « "\пВведите строку:\n": ein.get ( str. MAX. '$' ); cout « "Вы ввели:\n" « str « endl; return 0:

}

Теперь вы можете напечатать столько строк для ввода, сколько хотите. Метод будет принимать символы до тех пор, пока вы не введете завершающий символ (или до тех пор, пока введенные данные не превысят размер массива). Помните, что вам нужно будет нажать клавишу Enter после того, как вы напечатаете символ '$'. Вот пример взаимодействия с программой:

Введите строку: Широка страна моя родная Много в ней лесов, полей и рек Я другой такой страны не знаю.

Где так вольно дышит человек. $

Вы ввели:

Широка страна моя родная Много в ней лесов, полей и рек Я другой такой с граны не знаю, Где так вольно дышит человек.

Мы заканчивали каждую строку нажатием клавиши Enter, но программа продолжала принимать от нас ввод до тех пор, пока мы не ввели символ '$'.

Копирование строк

Лучшим способом понять истинную природу строк является произведение действий с ними символ за символом. Наша следующая программа делает именно это.

// strcopyl.срр

// копирование строки с использованием цикла !include <iostream> !include <cstring> using namespace std; /////////////////////////////////////////////////////////// int main ( ) (

// исходная строка

char strl [ ] = "Маленькой елочке холодно зимой,":

const int MAX = 80: // максимальная длина строки char str2 [ МАХ ]: // сама строка

for ( int j = 0: j < Strien ( strl ): j++ ) // копируем Strien ( strl ) str2 [ j ] = strl [ j ]; // символов из strl в str2

str2 [ j ] = '\0': // завершаем строку нулем 290 Глава 7. Массивы и строки

cout « str2 « endl: // и выводим на экран

return 0:

}

Эта программа создает строковую константу strl и строковую переменную str2. Затем в цикле for происходит копирование строковой константы в строковую переменную. За каждую итерацию цикла копируется один символ в строке программы

str2 [ j ] = strl [ j ]:

Вспомним, что компилятор объединяет две смежные строковые константы в одну, что позволяет нам записать цитату в двух строках.

Эта программа также знакомит нас с библиотечными функциями для строк. Так как в С++ нет встроенных операторов для работы со строками, то обычно используют эти функции. К счастью, их много. Одну из них мы использовали в программе strlen(), она определяет длину строки (сколько символов строка содержит). Мы используем длину строки для ограничения цикла for, чтобы скопировать нужное нам количество символов. Для использования библиотечных функций для строк нужно подключить к программе заголовочный файл CSTRING (или STRING.Н).

Скопированная версия строки должна заканчиваться нулевым символом. Однако длина строки, возвращаемая функцией strlen(), не включает в себя нулевой символ. Мы могли скопировать один добавочный символ, но проще вставить нулевой символ явно. Мы делаем это в строке

str2 Cjl= 'NO':

Если вы не вставите этот символ, то затем увидите, что в строку, напечатанную программой, будут включены символы, следующие за нужной вам строкой. Операция « просто печатает все символы до тех пор, пока не встретит '\0'.
Предыдущая << 1 .. 103 104 105 106 107 108 < 109 > 110 111 112 113 114 115 .. 341 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100