Строка - последовательность символов переменной длины. Чтобы использовать тип string
, необходимо включить в код заголовок string
. Поскольку string
принадлежит библиотеке, он определен в пространстве имен std
.
Наиболее распространенные операции класса string
представлены в таблице:
Операция | Объяснение |
---|---|
cout << s | Выводит строку s в поток вывода cout. Возвращает поток cout. |
cin >> s | Читает разделенную пробелами строку s из потока cin. Возвращает поток cin. |
getline(cin,s) | Читает строку ввода из потока cin в переменную s. Возвращает поток cin. |
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 | Строки s1 и s2 не равны, если содержат разные символы. Регистр символов учитывается. |
<, <=, >, >= | Сравнение зависит от регистра и полагается на алфавитный порядок символов |
Для чтения слов, отделенных пробелами достаточно использовать cin
#include <iostream>
#include <string>
using namespace std;
int main()
{
string word;
while (cin >> word)
cout << word << endl;
return 0;
}
Для чтения строки с пробелами необходимо использовать getline
. Можно добавить проверку на пустоту и вывод длины строки.
#include <iostream>
#include <string>
using namespace std;
int main()
{
string line;
getline(cin , line);
if (!line.empty())
cout << line << endl;
string::size_type length = line.size();
cout << length << endl;
return 0;
}
Длина строки возвращает значение не int
, как ожидалось, а string::size_type
. Запись выглядит довольно громоздко. Ее можно заменить на
auto length = line.size();
или
decltype(line.size()) length = line.size();
в зависимости от ситуации. Компилятор должен поддерживать стандарт С++11 для одной из двух таких записей, иначе код компилироваться не будет.