Инициализатор строки s8
— string(10, 'c')
— создает строку заданного размера, заполненную указанным символьным значением, а затем копирует ее в строку s8
. Это эквивалентно следующему коду:
string temp(10, 'c'); //
string s8 = temp; //
Хотя используемый для инициализации строки s8
код вполне допустим, он менее читабелен и не имеет никаких преимуществ перед способом, которым была инициализирована переменная s7
.
Наряду с определением способов создания и инициализации объектов класс определяет также операции, которые можно выполнять с объектами класса. Класс может определить обладающие именем операции, такие как функция isbn()
класса Sales_item
(см. раздел 1.5.2). Класс также может определить то, что означают различные символы операторов, такие как <<
или +
, когда они применяются к объектам класса. Наиболее распространенные операции класса string
приведены в табл. 3.2.
Таблица 3.2. Операции класса string
os << s | Выводит строку s в поток вывода os . Возвращает поток os |
is >> s | Читает разделенную пробелами строку s из потока is . Возвращает поток is |
getline(is, s) | Читает строку ввода из потока is в переменную s . Возвращает поток is |
s.empty() | Возвращает значение true , если строка s пуста. В противном случае возвращает значение false |
s.size() | Возвращает количество символов в строке s |
s[n] | Возвращает ссылку на символ в позиции n строки s ; позиции отсчитываются от 0 |
s1 + s2 | Возвращает строку, состоящую из содержимого строк s1 и s2 |
s1 = s2 | Заменяет символы строки s1 копией содержимого строки s2 |
s1 == s2 s1 != s2 | Строки s1 и s2 равны, если содержат одинаковые символы. Регистр символов учитывается |
< , <= , > , >= | Сравнение зависит от регистра и полагается на алфавитный порядок символов |
Как уже упоминалось в главе 1, для чтения и записи значений встроенных типов, таких как int
, double
и т.д., используется библиотека iostream
. Для чтения и записи строк используются те же операторы ввода и вывода.
//
//
int main() {
string s; //
cin >> s; //
cout << s << endl; //
return 0;
}
Программа начинается с определения пустой строки по имени s
. Следующая строка читает данные со стандартного устройства ввода и сохраняет их в переменной s
. Оператор ввода строк читает и отбрасывает все предваряющие непечатаемые символы (например, пробелы, символы новой строки и табуляции). Затем он читает значащие символы, пока не встретится следующий непечатаемый символ.
Таким образом, если ввести " Hello World! "
(обратите внимание на предваряющие и завершающие пробелы), фактически будет получено значение "Hello"
без пробелов.
Подобно операторам ввода и вывода встроенных типов, операторы строк возвращают как результат свой левый операнд. Таким образом, операторы чтения или записи можно объединять в цепочки.
string s1, s2;
cin >> s1 >> s2; //
//
cout << s1 << s2 << endl; //
Если в этой версии программы осуществить предыдущий ввод, " Hello World! "
, выводом будет "HelloWorld!"
.
В разделе 1.4.3 уже рассматривалась программа, читающая неопределенное количество значений типа int
. Напишем подобную программу, но читающую строки.
int main() {
string word;
while (cin >> word) //
cout << word << endl; //