HTML Diff
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 &lt;&lt; S;</p>
19 <p>cout &lt;&lt; S;</p>
20 <p>Если же надо выполнить считывание, используют операцию "&gt;&gt;" для объекта cin:</p>
20 <p>Если же надо выполнить считывание, используют операцию "&gt;&gt;" для объекта cin:</p>
21 <p>cin &gt;&gt; S;</p>
21 <p>cin &gt;&gt; S;</p>
22 <p>Результатом вышеуказанной операции станет считывание строчки из непробельных символов, то есть пробелы и концы строк будут пропущены. Это довольно удобно, если надо разбить текст на слова либо в целях считывания данных до конца файла посредством while (cin &gt;&gt; S).</p>
22 <p>Результатом вышеуказанной операции станет считывание строчки из непробельных символов, то есть пробелы и концы строк будут пропущены. Это довольно удобно, если надо разбить текст на слова либо в целях считывания данных до конца файла посредством while (cin &gt;&gt; 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>&lt;, &gt;, &lt;=, &gt;=</strong> - для лексикографического сравнения.</li>
31 <li><strong>&lt;, &gt;, &lt;=, &gt;=</strong> - для лексикографического сравнения.</li>
32 </ul><p>Таким образом, мы можем выполнить копирование содержимого одной строки в другую посредством операции S1 = S2, далее выполнить их сравнение на равенство посредством S1 == S2, потом сравнить в лексикографическом порядке (S1 &lt; S2) либо или выполнить конкатенацию (сложение) в виде S = S1 + S2.</p>
32 </ul><p>Таким образом, мы можем выполнить копирование содержимого одной строки в другую посредством операции S1 = S2, далее выполнить их сравнение на равенство посредством S1 == S2, потом сравнить в лексикографическом порядке (S1 &lt; 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 &lt; S.size() - 1; ++i).</p>
36 <p>Возвращает длину строки. Значение, которое таким образом возвращается, имеет беззнаковый тип (как и во всех других случаях, если функция возвращает значение, которое равняется длине строке либо индексу элемента, такие значения являются беззнаковыми). Именно поэтому следует предельно внимательно выполнять вычитание из значения, которое возвращается посредством<strong>size</strong>(). К примеру, будет ошибкой записать цикл, перебирающий все строчные элементы, кроме последнего, типа for (int i = 0; i &lt; 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