0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<ul><li><a>Конструкторы</a><ul><li><a>Ввод-вывод</a></li>
1
<ul><li><a>Конструкторы</a><ul><li><a>Ввод-вывод</a></li>
2
<li><a>Арифметические операторы</a></li>
2
<li><a>Арифметические операторы</a></li>
3
<li><a>Методы</a></li>
3
<li><a>Методы</a></li>
4
</ul></li>
4
</ul></li>
5
</ul><p>В этой статье мы поговорим о классе<strong>string</strong>, который включен в стандартную библиотеку языка программирования C++. Одновременно с этим рассмотрим<strong>основы работы со строками</strong>: изучим конструкторы, арифметические операторы и некоторые методы.</p>
5
</ul><p>В этой статье мы поговорим о классе<strong>string</strong>, который включен в стандартную библиотеку языка программирования C++. Одновременно с этим рассмотрим<strong>основы работы со строками</strong>: изучим конструкторы, арифметические операторы и некоторые методы.</p>
6
<p>В языке программирования C++ существует специальный класс<strong>string</strong>, обеспечивающий удобство работы со строковыми данными. Для его применения нет необходимости выполнять хитрые манипуляции - достаточно просто подключить соответствующий заголовочный файл string.</p>
6
<p>В языке программирования C++ существует специальный класс<strong>string</strong>, обеспечивающий удобство работы со строковыми данными. Для его применения нет необходимости выполнять хитрые манипуляции - достаточно просто подключить соответствующий заголовочный файл string.</p>
7
<p>Если вспомнить тот же Си, то там существует заголовочный файл стандартной библиотеки, который называется<strong>string.h</strong>. Он содержит функции, необходимые для работы с памятью и нуль-терминированными строками. На практике функции, объявленные в string.h, применяются довольно широко, так как являются частью стандартной библиотеки, в результате чего стабильно работают на любых платформах, которые поддерживают язык программирования Си.</p>
7
<p>Если вспомнить тот же Си, то там существует заголовочный файл стандартной библиотеки, который называется<strong>string.h</strong>. Он содержит функции, необходимые для работы с памятью и нуль-терминированными строками. На практике функции, объявленные в string.h, применяются довольно широко, так как являются частью стандартной библиотеки, в результате чего стабильно работают на любых платформах, которые поддерживают язык программирования Си.</p>
8
<p>Но вернемся к С++. На практике вы можете не просто объявлять строки, но и одновременно с этим присваивать им значения:</p>
8
<p>Но вернемся к С++. На практике вы можете не просто объявлять строки, но и одновременно с этим присваивать им значения:</p>
9
<p>В нашем случае S1 будет являться пустой, а S2 - состоять из пяти символов.</p>
9
<p>В нашем случае S1 будет являться пустой, а S2 - состоять из пяти символов.</p>
10
<p>Идем дальше. К отдельным символам вы можете обращаться по индексу, как к элементам массива. К примеру, S[0] позволит обратиться к первому строчному элементу (как и в массиве, нумерация начинается с нуля).</p>
10
<p>Идем дальше. К отдельным символам вы можете обращаться по индексу, как к элементам массива. К примеру, S[0] позволит обратиться к первому строчному элементу (как и в массиве, нумерация начинается с нуля).</p>
11
<p>Если же надо узнать длину строки<strong>length</strong>, вы можете воспользоваться методом<strong>size()</strong>. К примеру, последний символ строки S можно выразить как S[S.size() - 1].</p>
11
<p>Если же надо узнать длину строки<strong>length</strong>, вы можете воспользоваться методом<strong>size()</strong>. К примеру, последний символ строки S можно выразить как S[S.size() - 1].</p>
12
<h2><strong>Конструкторы</strong></h2>
12
<h2><strong>Конструкторы</strong></h2>
13
<p>При работе со строковыми данными возможно применение ряда конструкторов:</p>
13
<p>При работе со строковыми данными возможно применение ряда конструкторов:</p>
14
<p>Вызов конструкторов может быть явным, как в примере ниже:</p>
14
<p>Вызов конструкторов может быть явным, как в примере ниже:</p>
15
<p>То есть мы осуществили вызов конструктора string в целях создания строчки, которая включает в себя 10 символов ‘z’.</p>
15
<p>То есть мы осуществили вызов конструктора string в целях создания строчки, которая включает в себя 10 символов ‘z’.</p>
16
<p>Вызов бывает и неявным, что происходит в процессе объявления, когда указываются дополнительные параметры. Это может выглядеть следующим образом:</p>
16
<p>Вызов бывает и неявным, что происходит в процессе объявления, когда указываются дополнительные параметры. Это может выглядеть следующим образом:</p>
17
<h3><strong>Ввод-вывод</strong></h3>
17
<h3><strong>Ввод-вывод</strong></h3>
18
<p>Вывод строчных значений осуществляется так же, как и числовых:</p>
18
<p>Вывод строчных значений осуществляется так же, как и числовых:</p>
19
<p>cout << S;</p>
19
<p>cout << S;</p>
20
<p>Если же надо выполнить считывание, используют операцию ">>" для объекта cin:</p>
20
<p>Если же надо выполнить считывание, используют операцию ">>" для объекта cin:</p>
21
<p>cin >> S;</p>
21
<p>cin >> S;</p>
22
<p>Результатом вышеуказанной операции станет считывание строчки из непробельных символов, то есть пробелы и концы строк будут пропущены. Это довольно удобно, если надо разбить текст на слова либо в целях считывания данных до конца файла посредством while (cin >> S).</p>
22
<p>Результатом вышеуказанной операции станет считывание строчки из непробельных символов, то есть пробелы и концы строк будут пропущены. Это довольно удобно, если надо разбить текст на слова либо в целях считывания данных до конца файла посредством while (cin >> S).</p>
23
<p>Есть возможность выполнять считывание и до появления символа конца строки - тут уже пригодится функция<em>getline</em>. А вот сам символ конца считывается уже из входного потока, правда, непосредственно к строке его добавление не происходит:</p>
23
<p>Есть возможность выполнять считывание и до появления символа конца строки - тут уже пригодится функция<em>getline</em>. А вот сам символ конца считывается уже из входного потока, правда, непосредственно к строке его добавление не происходит:</p>
24
<p>getline(cin S);</p>
24
<p>getline(cin S);</p>
25
<h3><strong>Арифметические операторы</strong></h3>
25
<h3><strong>Арифметические операторы</strong></h3>
26
<p>Работая со строковыми данными, мы можем выполнять ряд арифметических операций, среди них:</p>
26
<p>Работая со строковыми данными, мы можем выполнять ряд арифметических операций, среди них:</p>
27
<ul><li><strong>=</strong> - для присваивания значения;</li>
27
<ul><li><strong>=</strong> - для присваивания значения;</li>
28
<li><strong>+=</strong> - для добавления в конец какого-нибудь другого элемента (к примеру, числа) либо даже другой строки;</li>
28
<li><strong>+=</strong> - для добавления в конец какого-нибудь другого элемента (к примеру, числа) либо даже другой строки;</li>
29
<li><strong>+</strong> - оператор конкатенации двух строк/строки и символа;</li>
29
<li><strong>+</strong> - оператор конкатенации двух строк/строки и символа;</li>
30
<li><strong>==, !=</strong> - для посимвольного сравнения;</li>
30
<li><strong>==, !=</strong> - для посимвольного сравнения;</li>
31
<li><strong><, >, <=, >=</strong> - для лексикографического сравнения.</li>
31
<li><strong><, >, <=, >=</strong> - для лексикографического сравнения.</li>
32
</ul><p>Таким образом, мы можем выполнить копирование содержимого одной строки в другую посредством операции S1 = S2, далее выполнить их сравнение на равенство посредством S1 == S2, потом сравнить в лексикографическом порядке (S1 < S2) либо или выполнить конкатенацию (сложение) в виде S = S1 + S2.</p>
32
</ul><p>Таким образом, мы можем выполнить копирование содержимого одной строки в другую посредством операции S1 = S2, далее выполнить их сравнение на равенство посредством S1 == S2, потом сравнить в лексикографическом порядке (S1 < S2) либо или выполнить конкатенацию (сложение) в виде S = S1 + S2.</p>
33
<h3><strong>Методы</strong></h3>
33
<h3><strong>Методы</strong></h3>
34
<p>Для работы со строковыми данными существуют разнообразные методы, причем многие из них вы сможете использовать разнообразными способами (с различным набором параметров). Давайте рассмотрим некоторые из существующих методов.</p>
34
<p>Для работы со строковыми данными существуют разнообразные методы, причем многие из них вы сможете использовать разнообразными способами (с различным набором параметров). Давайте рассмотрим некоторые из существующих методов.</p>
35
<p><strong>size</strong></p>
35
<p><strong>size</strong></p>
36
<p>Возвращает длину строки. Значение, которое таким образом возвращается, имеет беззнаковый тип (как и во всех других случаях, если функция возвращает значение, которое равняется длине строке либо индексу элемента, такие значения являются беззнаковыми). Именно поэтому следует предельно внимательно выполнять вычитание из значения, которое возвращается посредством<strong>size</strong>(). К примеру, будет ошибкой записать цикл, перебирающий все строчные элементы, кроме последнего, типа for (int i = 0; i < S.size() - 1; ++i).</p>
36
<p>Возвращает длину строки. Значение, которое таким образом возвращается, имеет беззнаковый тип (как и во всех других случаях, если функция возвращает значение, которое равняется длине строке либо индексу элемента, такие значения являются беззнаковыми). Именно поэтому следует предельно внимательно выполнять вычитание из значения, которое возвращается посредством<strong>size</strong>(). К примеру, будет ошибкой записать цикл, перебирающий все строчные элементы, кроме последнего, типа for (int i = 0; i < S.size() - 1; ++i).</p>
37
<p>Также длину строки можно возвратить с помощью метода<strong>length</strong>().</p>
37
<p>Также длину строки можно возвратить с помощью метода<strong>length</strong>().</p>
38
<p><strong>resize</strong></p>
38
<p><strong>resize</strong></p>
39
<p>S.resize(n) позволит изменить длину строки, причем новая длина станет равняться<em>n</em>. Важно понимать, что длина строки ведь может как увеличиться, так и уменьшится. Вызвав метод в виде <em>S.resize(n, c)</em>, когда<em>c</em>- символ, вы получите ситуацию, при которой при увеличении строковой длины добавляемые элементы станут равняться<em>c</em>.</p>
39
<p>S.resize(n) позволит изменить длину строки, причем новая длина станет равняться<em>n</em>. Важно понимать, что длина строки ведь может как увеличиться, так и уменьшится. Вызвав метод в виде <em>S.resize(n, c)</em>, когда<em>c</em>- символ, вы получите ситуацию, при которой при увеличении строковой длины добавляемые элементы станут равняться<em>c</em>.</p>
40
<p><strong>clear</strong></p>
40
<p><strong>clear</strong></p>
41
<p>S.clear() очистит строчку, в результате чего она станет пустой.</p>
41
<p>S.clear() очистит строчку, в результате чего она станет пустой.</p>
42
<p><strong>empty</strong></p>
42
<p><strong>empty</strong></p>
43
<p>S.empty() возвратит true, когда строчка будет пустой и false, когда непустой.</p>
43
<p>S.empty() возвратит true, когда строчка будет пустой и false, когда непустой.</p>
44
<p><strong>push_back</strong></p>
44
<p><strong>push_back</strong></p>
45
<p>S.push_back(c) добавит в конец символ<em>c</em>. Этот метод вызывается с одним параметром, имеющим тип данных char.</p>
45
<p>S.push_back(c) добавит в конец символ<em>c</em>. Этот метод вызывается с одним параметром, имеющим тип данных char.</p>
46
<p><strong>append</strong></p>
46
<p><strong>append</strong></p>
47
<p>Добавит в конец несколько символов, другую строчку либо ее фрагмент. Тут существует множество способов вызова:</p>
47
<p>Добавит в конец несколько символов, другую строчку либо ее фрагмент. Тут существует множество способов вызова:</p>
48
<ul><li><em>S.append(n, c)</em>- добавляется<em>n</em>одинаковых элементов, которые равны<em>с</em>. У<em>n</em>здесь целочисленный тип, а у<em>c</em>- char;</li>
48
<ul><li><em>S.append(n, c)</em>- добавляется<em>n</em>одинаковых элементов, которые равны<em>с</em>. У<em>n</em>здесь целочисленный тип, а у<em>c</em>- char;</li>
49
<li><em>S.append(T)</em> - добавляется содержимое T-строки. Причем T может быть как С-строчкой, так и объектом класса string;</li>
49
<li><em>S.append(T)</em> - добавляется содержимое T-строки. Причем T может быть как С-строчкой, так и объектом класса string;</li>
50
<li><em>S.append(T, pos, count)</em> - добавляются символы T-строки, начиная с символа, имеющего индекс<em>pos</em>. Добавление происходит в количестве<em>count</em>.</li>
50
<li><em>S.append(T, pos, count)</em> - добавляются символы T-строки, начиная с символа, имеющего индекс<em>pos</em>. Добавление происходит в количестве<em>count</em>.</li>
51
</ul><p>Хотите знать про C++ больше? Получить нужные навыки вы сможете на курсах в Otus.</p>
51
</ul><p>Хотите знать про C++ больше? Получить нужные навыки вы сможете на курсах в Otus.</p>
52
<a></a><p><em>Источник: https://server.179.ru/tasks/cpp/total/161.html.</em></p>
52
<a></a><p><em>Источник: https://server.179.ru/tasks/cpp/total/161.html.</em></p>
53
53