Основы работы со строками в C++
В языке C++ для удобной работы со строками есть класс string, для использования которого необходимо подключить заголовочный файл string.
Строки можно объявлять и одновременно присваивать им значения:
string S1, S2 = «Hello»;
Строка S1 будет пустой, строка S2 будет состоять из 5 символов.
К отдельным символам строки можно обращаться по индексу, как к элементам массива или C-строк. Например S[0] — это первый символ строки.
Для того, чтобы узнать длину строки можно использовать метод size() строки. Например, последний символ строки S это S[S.size() — 1 ].
Строки в языке C++ могут
Конструкторы строк
Строки можно создавать с использованием следующих конструкторов:
string() — конструктор по умолчанию (без параметров) создает пустую строку.
string(string & S) — копия строки S
string( size_t n, char c) — повторение символа c заданное число n раз.
string(size_t c) — строка из одного символа c .
string(string & S, size_t start, size_t len) — строка, содержащая не более, чем len символов данной строки S , начиная с символа номер start .
Конструкторы можно вызывать явно, например, так:
В этом примере явно вызывается конструктор string для создания строки, состоящей из 10 символов ‘z’ .
Неявно конструктор вызывается при объявлении строки с указанием дополнительных параметров. Например, так:
Подробней о конструкторах для строк читайте здесь.
Ввод-вывод строк
Строка выводится точно так же, как и числовые значения:
Для считывания строки можно использовать операцию «>>» для объекта cin:
В этом случае считывается строка из непробельных символов, пропуская пробелы и концы строк. Это удобно для того, чтобы разбивать текст на слова, или чтобы читать данные до конца файла при помощи while (cin >> S) .
Можно считывать строки до появления символа конца строки при помощи функции getline. Сам символ конца строки считывается из входного потока, но к строке не добавляется:
Арифметические операторы
Со строками можно выполнять следующие арифметические операции:
= — присваивание значения.
+= — добавление в конец строки другой строки или символа.
+ — конкатенация двух строк, конкатенация строки и символа.
== , != — посимвольное сравнение.
< , >, = — лексикографическое сравнение.
То есть можно скопировать содержимое одной строки в другую при помощи операции S1 = S2, сравнить две строки на равенство при помощи S1 == S2, сравнить строки в лексикографическом порядке при помощи S1 < S2, или сделать сложение (конкатенацию) двух строк в виде S = S1 + S2.
Подробней об операторах для строк читайте здесь.
Методы строк
У строк есть разные методы, многие из них можно использовать несколькими разными способами (с разным набором параметров).
Рассмотрим эти методы подробней.
size
Метод size() возращает длину длину строки. Возвращаемое значение является беззнаковым типом (как и во всех случаях, когда функция возращает значение, равное длине строке или индексу элемента — эти значения беззнаковые). Поэтому нужно аккуратно выполнять операцию вычитания из значения, которое возвращает size(). Например, ошибочным будет запись цикла, перебирающего все символы строки, кроме последнего, в виде for (int i = 0; i < S.size() - 1; ++i).
Кроме того, у строк есть метод length(), который также возвращает длину строки.
Подробней о методе size.
resize
S.resize(n) — Изменяет длину строки, новая длина строки становится равна n. При этом строка может как уменьшится, так и увеличиться. Если вызвать в виде S.resize(n, c) , где c — символ, то при увеличении длины строки добавляемые символы будут равны c.
Подробней о методе resize.
clear
S.clear() — очищает строчку, строка становится пустой.
Подробней о методе clear.
empty
S.empty() — возвращает true, если строка пуста, false — если непуста.
Подробней о методе empty.
push_back
S.push_back(c) — добавляет в конец строки символ c, вызывается с одним параметром типа char.
Подробней о методе push_back.
append
Добавляет в конец строки несколько символов, другую строку или фрагмент другой строки. Имеет много способов вызова.
S.append(n, c) — добавляет в конец строки n одинаковых символов, равных с. n имеет целочисленный тип, c — char.
S.append(T) — добавляет в конец строки S содержимое строки T. T может быть объектом класса string или C-строкой.
S.append(T, pos, count) — добавляет в конец строки S символы строки T начиная с символа с индексом pos количеством count.
Подробней о методе append.
erase
S.erase(pos) — удаляет из строки S с символа с индексом pos и до конца строки.
S.erase(pos, count) — удаляет из строки S с символа с индексом pos количеством count или до конца строки, если pos + count > S.size().
Подробней о методе erase.
insert
Вставляет в середину строки несколько символов, другую строку или фрагмент другой строки. Способы вызова аналогичны способам вызова метода append, только первым параметром является значение i — позиция, в которую вставляются символы. Первый вставленный символ будет иметь индекс i, а все символы, которые ранее имели индекс i и более сдвигаются вправо.
S.insert(i, n, c) — вставить n одинаковых символов, равных с. n имеет целочисленный тип, c — char.
S.insert(i, T) — вставить содержимое строки T. T может быть объектом класса string или C-строкой.
S.insert(i, T, pos, count) — вставить символы строки T начиная с символа с индексом pos количеством count.
Подробней о методе insert.
substr
S.substr(pos) — возвращает подстроку данной строки начиная с символа с индексом pos и до конца строки.
S.substr(pos, count) — возвращает подстроку данной строки начиная с символа с индексом pos количеством count или до конца строки, если pos + count > S.size().
Подробней о методе substr.
replace
Заменяет фрагмент строки на несколько равных символов, другую строку или фрагмент другой строки. Способы вызова аналогичны способам вызова метода append, только первыми двумя параметрами являются два числа: pos и count. Из данной строки удаляется count символов, начиная с символа pos, и на их место вставляются новые символы.
S.replace(pos, count, n, c) — вставить n одинаковых символов, равных с. n имеет целочисленный тип, c — char.
S.replace(pos, count, T) — вставить содержимое строки T. T может быть объектом класса string или C-строкой.
S.replace(pos, count, T, pos2, count2) — вставить символы строки T начиная с символа с индексом pos количеством count.
Подробней о методе replace.
find
Ищет в данной строке первое вхождение другой строки str. Возвращается номер первого символа, начиная с которого далее идет подстрока, равная строке str. Если эта строка не найдена, то возвращается константа string::npos (которая равна -1, но при этом является беззнаковой, то есть на самом деле является большим безннаковым положительным числом).
Если задано значение pos, то поиск начинается с позиции pos, то есть возращаемое значение будет не меньше, чем pos. Если значение pos не указано, то считается, что оно равно 0 — поиск осуществляется с начала строки.
S.find(str, pos = 0) — искать первое входение строки str начиная с позиции pos. Если pos не задано — то начиная с начала строки S.
S.find(str, pos, n) — искать в данной строке подстроку, равную первым n символам строки str. Значение pos должно быть задано.
Подробней о методе find.
rfind
Ищет последнее вхождение подстроки («правый» поиск). Способы вызова аналогичны способам вызова метода find.
Подробней о методе rfind.
find_first_of
Ищет в данной строке первое появление любого из символов данной строки str. Возвращается номер этого символа или значение string::npos.
Если задано значение pos, то поиск начинается с позиции pos, то есть возращаемое значение будет не меньше, чем pos. Если значение pos не указано, то считается, что оно равно 0 — поиск осуществляется с начала строки.
S.find_first_of(str, pos = 0) — искать первое входение любого символа строки str начиная с позиции pos. Если pos не задано — то начиная с начала строки S.
find_last_of
Ищет в данной строке последнее появление любого из символов данной строки str. Способы вызова и возвращаемое значение аналогичны методу find_first_of.
Подробней о методе find_last_of.
find_first_not_of
Ищет в данной строке первое появление символа, отличного от символов строки str. Способы вызова и возвращаемое значение аналогичны методу find_first_of.
find_last_not_of
Ищет в данной строке последнее появление символа, отличного от символов строки str. Способы вызова и возвращаемое значение аналогичны методу find_first_of.
c_str
Возвращает указать на область памяти, в которой хранятся символы строки, возвращает значение типа char*. Возвращаемое значение можно рассматривать как C-строку и использовать в функциях, которые должны получать на вход C-строку.
Подробней о методе c_str.
22.5 – Присваивание и обмен значениями для объектов std::string
Самый простой способ присвоить значение строке – использовать перегруженную функцию operator= . Существует также функция-член assign() , которая дублирует некоторые из этих возможностей.
string& string::operator= (const string& str)
string& string::assign (const string& str)
string& string::operator= (const char* str)
string& string::assign (const char* str)
string& string::operator= (char c)
Эти функции присваивают строке значения различных типов. Они возвращают *this , чтобы их можно было объединить в «цепочку».
Обратите внимание, что нет функции assign() , которая принимает один символ char .
string sString; // Присваиваем строковое значение sString = string("One"); cout
One Two Three Four 5 Six Six
Функция-член assign() также имеет несколько других вариантов:
string& string::assign (const string& str, size_type index, size_type len)
Присваивает подстроку str , начиная с позиции index , и длиной len .
- Выдает исключение out_of_range , если индекс выходит за границы строки.
- Возвращает *this , чтобы можно было объединить в «цепочку».
const string sSource("abcdefg"); string sDest; // присваиваем подстроку из источника, начиная с индекса 2, длиной 4 sDest.assign(sSource, 2, 4); cout
cdef
string& string::assign (const char* chars, size_type len)
Присваивает len символов из массива символов в стиле C.
- Выдает исключение length_error , если результат превышает максимальное количество символов
- Возвращает *this , чтобы можно было объединить в «цепочку».
string sDest; sDest.assign("abcdefg", 4); cout
abcd
Эта функция потенциально опасна, и ее использование не рекомендуется.
string& string::assign (size_type len, char c)
Присваивает len вхождений символа c .
- Выдает исключение length_error , если результат превышает максимальное количество символов
- Возвращает *this , чтобы можно было объединить в «цепочку».
string sDest; sDest.assign(4, 'g'); cout
gggg
Обмен значениями
Если у вас есть две строки, и вы хотите поменять их значения местами, вы можете использовать две функции с именем swap() .
void string::swap (string &str)
void swap (string &str1, string &str2)
Обе функции меняют местами значения двух строк. Функция-член меняет местами значения *this и str , глобальная функция меняет местами значения str1 и str2 .
Эти функции эффективны и должны использоваться вместо присваиваний для выполнения обмена значений строк.
string sStr1("red"); string sStr2("blue"); cout
red blue blue red red blue
Теги
Сохранить или поделиться
На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.
В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.
Присоединяйтесь к нам во ВКонтакте!
- Антенны и распространение радиоволн
- Беспроводная связь
- Высокочастотная техника
- Волоконно-оптические линии связи (ВОЛС)
- Измерительная техника
- Исполнительные механизмы и драйверы
- САПР
- Спутниковая связь
- Схемотехника
- Телевидение
- Цифровая электроника
- Технологии и инструменты
- Электронные компоненты
- А что внутри?
- Прочее (радиоэлектроника)
- Алгоритмы и структуры данных
- Базы данных
- Веб-разработка
- Мультимедиа (разработка ПО)
- Нейронные сети
- Паттерны проектирования
- Связь
- Системы сборки ПО
- Языки программирования
- Компьютерные сети
- Операционные системы
- Верстка
- Системы контроля версий
- История технологий
- Мультимедиа
- Новости телекома
- Нормативная документация
- Охрана труда
- Полезные программы
- Просто интересно
- Экономика телекоммуникаций и электронной промышленности
- Экономика и инвестиции
Мы в соцсетях
Присвоить значение строке
Присвоить значение colorDialog строке
Добрый день. Может поможете новичку, честно - тока тока знакомлюсь c C#. Изобретаю редактор CSS.

Присвоить значение строке многомерного массива
Есть двумерный массив типа double. Написана функция, разбирающая строку (string) на отдельные.

Присвоить строке значение другой строки
Добрый день. У меня есть строки FILE_OVL_1 DB 'ABCD',0 FILE_OVL_2 DB .
Datagridview, присвоить одной строке значение другой
как можно присвоить одной строке значение другой? dataGridView1.Rows = dataGridView1.Rows;.
Присваивание строк
Процедура слияния двух строк состоит в том, что символы, содержащиеся в одной строке, добавляются в конец другой, сдвигая нулевой символ. Этот процесс называется конкатенацией (concatenation). В стандарте языка Си K&R определена функция strcat(), работа которой продемонстрирована на рис.10.9. Символы из строки, которая передается функции в качестве второго параметра, добавляются в конец строки, передаваемой в качестве первого параметра.
Массивы строк
Можно организовать массив строк точно так же, как массив данных любого другого типа. Но массив строк, по сути, будет являться уже массивом массивов символов. Массив, элементы которого сами являются массивами, называется двухмерным массивом. Двухмерный массив можно представить себе как таблицу, имеющую ряды и колонки. Такой массив следует определять с двумя индексами, один из которых определяет количество рядов таблицы, а второй устанавливает количество колонок. Ниже приведены инструкции, определяющие массив, имеющий 10 рядов и 20 колонок, то есть содержащий 200 целочисленных переменных: int table[10][20]; Представим себе каждый элемент как целое число, занимающее собственную
Рис. 10.10. Определение массива строк клеточку в таблице 10Ф20. Элемент table[0][0] находится в левом верхнем углу таблицы, а элемент table[0][1] занимает соседнюю клетку справа в том же ряду. Определяя массив строк, также необходимо использовать два индекса. Первый определяет максимальное количество строк в массиве, а второй указывает максимальную длину каждой строки. Таким образом, определение char names[10][20]; задает десять строковых переменных names длиной не больше 19 символов в каждой (рис.10.10). Если вы хотите задавать строки путем ввода значений отдельных символов, следует использовать вложенные циклы. Внешний цикл будет повторяться 10 раз, по одному на каждую строку, а внутренний должен иметь 19 повторов для ввода значений одной строки. На рис.10.11 приведена программа, в которой вводятся значения 10 имен (строковых переменных) в массив, а затем все эти 10 строк с помощью цикла for последовательно выводятся на экран. Для того чтобы ввести символ в строку, необходимо использовать оба индекса: name[index][index2] = letter; Первый индекс указывает номер нужной строки внутри массива, а второй определяет позицию символа внутри строки. Например, на рис.10.12 элемент name[0][3] является четвертым символом (буква м) первой строки ("Адам") в
Рис. 10.11. Программирование массива строк
Рис. 10.12. Строки и элементы массива строк массиве имен. Чтобы вывести на экран строку целиком, нужен только один индекс, указывающий номер строки: puts(name[index]); К счастью, Си и Си++ позволяют ввести всю строку как единое целое, используя только один цикл, повторяющийся по одному разу на каждую строку массива: main() < char name[10][20]; int index; for (index = 0; index < 10; index++) gets(name[index]); for (index = 0; index < 10; index++) puts(name[index]); >
