строки

Ответить
ya
^-^
Сообщения: 2336
Зарегистрирован: 16 дек 2021, 19:56

строки

Сообщение ya »

Код: Выделить всё

string wordl = "Game":
string word2("0ver");
Работа со строковыми объектами
string word3(3, '!'); // Создаётся объект из трёх восклицательных знаков
string phrase = wordl + " " + word2 + wordЗ:
cout « "The phrase is: " « phrase « "\n\n":
Размер строки:

Код: Выделить всё

for (unsigned int i =0; i < phrase.size(); ++i)
{
cout « "Character at position " « i « " is: " « phrase[i] « endl;
}
ya
^-^
Сообщения: 2336
Зарегистрирован: 16 дек 2021, 19:56

Re: строки

Сообщение ya »

Строковые объекты также имеют функцию-член length(). Она, как и функция size(), возвращает
количество символов в объекте string.
ya
^-^
Сообщения: 2336
Зарегистрирован: 16 дек 2021, 19:56

Re: строки

Сообщение ya »

Оператор индексации не только позволяет обращаться к отдельным символам
в объекте string, но и обеспечивает присваивание новых значений этим символам
взамен уже имеющихся. Такая операция происходит в следующем коде:
phrase[0] = 'L' ;

Компиляторы С++ не выполняют проверку границ, когда работают с объектами striпg и оператором
индексации. В результате вся программа может аварийно завершиться.
ya
^-^
Сообщения: 2336
Зарегистрирован: 16 дек 2021, 19:56

find()

Сообщение ya »

phrase. find("Over") возвращает номер позиции, с которой во фразе phrase начинается первый экземпляр "Over".

Но что делать, если искомая подстрока отсутствует в строке, вызвавшей функцию?
Такая ситуация рассмотрена далее:

Код: Выделить всё

if (phrase.find("eggplant") == string: :npos)
{
cout « "'eggplant' is not in the phrase. \n\n";
}
Поскольку в объекте phrase отсутствует строка "eggplant", функция find() возвращает
особую константу, определенную в файле stri ng. Я обращаюсь к этой константе
с помощью кода string: :npos. В результате на экран выводится сообщение
'eggplant' is not in the phrase.

Константа, к которой я обращаюсь с помощью string: : npos, представляет собой
максимальный возможный размер объекта string. Таким образом, это значение
превышает любое возможное допустимое значение позиции в объекте string.
В сущности, здесь используется номер позиции, которого не может быть. Подобное
возвращаемое значение отлично демонстрирует, что одну строку не удается найти
в другой.
ya
^-^
Сообщения: 2336
Зарегистрирован: 16 дек 2021, 19:56

erase()

Сообщение ya »

erase() удаляет указщ1ную подстроку из объекта string. Один из
вариантов вызова такой функции-члена - задать начальную позицию на удаление
и длину подстроки, что я и делаю в следующем коде:

phrase.erase(4, 5);

В предыдущей строке удаляется пятисимвольная подстрока, начинающаяся с позиции 4.

erase() можно вызывать просто без всяких аргументов,
phrase. erase();
Этот код стирает все символы в объекте phrase.
Последний раз редактировалось ya 04 сен 2023, 18:59, всего редактировалось 1 раз.
ya
^-^
Сообщения: 2336
Зарегистрирован: 16 дек 2021, 19:56

empty()

Сообщение ya »

empty() возвращает значение типа bool. Оно равно true, если объект
string пуст, в противном случае возвращает false. Функция-член empty() используется
в следующем коде:

Код: Выделить всё

if (phrase.empty())
{
cout « "\nThe phrase is no more.\n";
}
Поскольку объект phrase равен пустой строке, метод phrase().empty возвращает
true и на экран выводится сообщение The phrase i s no more.
ya
^-^
Сообщения: 2336
Зарегистрирован: 16 дек 2021, 19:56

массив

Сообщение ya »

Массив - это последовательность объектов st ri ng, по одному такому объекту
на каждый артефакт, которым владеет герой. Герой может покупать и даже находить
новые вещи.

Код: Выделить всё

// Программа Hero's Inventory
// Демонстрирует работу с массивами
#include <iostream>
#include <string>
using namespace std:
int main()
{
const int МАХ ITEMS = 10:
string inventory[MAX ITEMSJ:
int numltems = 0;
inventory[numltems++ ] "sword":
inventory[numltems++ ] "armor":
inventory[numltems++] "shield":
cout « "Your items:\n";
for (int i =О: i < numltems: ++i)
{
cout << inventory[i] << endl:
}
cout « "\nYou trade your sword for а battle ахе. ";
inventory[0] = "battlе ахе":
cout « "\nYour items:\n":
for (int i =0; i < numltems: ++i)
{
cout << inventory[i] << endl;
Работа с массивами
cout « "\nThe item name '" « inventory[0] « "' has ";
cout « inventory[0] .size() « " letters in it. \n";
cout « "\nYou find а healing potion.";
if (numltems < МАХ ITEMS)
{ -
inventory[numltems++] = "healing potion";
}
else
{
cout « "You have too many items and can't carry another.";
}
cout « "\nYour items:\n":
for (int i =0: i < numltems: ++i)
{
cout <<inventory[iJ << endl:
}
return 0;
}
Соэдание массивов
const int MAX_ITEMS = 10;
string inventory[MAX_ITEMS];

Можно инициализировать массив прямо со значениями, если при его объявлении вы сразу указываете
список инициализаторов. Это последовательность элементов, заключенная в фигурные скобки,
причем сами элементы разделяются запятыми. Вот пример:
stringinventory[МAX_IТEMS] = {"sword". "armor". "shield"};
В этом коде объявляется массив inventory, состоящий из объектов string и имеющий размер МАХ_IТЕМS.
Первые три элемента массива инициализируются в значениях "sworcl", "armor" и "shield".
Если не указывать количесrво элементов в списке инициализаторов, то размер созданного массива
будет равен количеству элементов, уже имеющихся в списке, например:
string inventory[] = { "sword". "armor". "shield"};
Поскольку в списке инициализаторов всего три элемента, в предыдущей строке создается массив
inventory размером три элемента. Он состоит из элементов "sword", "armor" и "shield".
Ответить