Загрузил Aleks Pes

Строки (1)

реклама
Строки
Класс string в программах на C++
• Класс string предназначен для работы со строками типа char*, которые
представляют собой строку с завершающим нулем. Класс string был введенн
как альтернативный вариант для работы со строками типа char*. Строки,
которые завершаются символом ‘\0’ еще называются C-строками.
Поскольку, string есть классом, то можно объявлять объекты этого класса.
• Чтобы использовать возможности класса string в MS Visual Studio (C++),
нужно подключить библиотеку <string> и пространство имен std.
#include <string>
using namespace std;
Пример
// тип string
string s1; // переменная с именем s1 типа string
string s2 = "This is a string variable"; /* объявление с инициализацией
использование переменной типа string с оператором присваивания */
s1 = s2; // s1 = "This is a string variable"
s2 = "New text";
Какие преимущества и недостатки дает
использование класса string в сравнении с
типом char*?
Создание нового типа string было обусловлено недостатками работы с строками символов, который демонстрировал
тип char*. В сравнении с типом char* тип string имеет следующие основные преимущества:
• возможность обработки строк стандартными операторами C++ (=, +, = =, <> и т.п.). Как известно, при
использовании типа char* даже наиболее простые операции со строками выглядели сложно и требовали написания
чрезмерного программного кода;
• обеспечение лучшей надежности (безопасности) программного кода. Например, при копировании строк,
тип string обеспечивает соответствующие действия, которые могут возникнуть в случае, если строка-источник
имеет больший размер чем строка-приемник;
• обеспечение строки, как самостоятельного типа данных. Объявление типа string как строки есть единым для всех
переменных в программе, которая обеспечивает непротиворечивость данных.
• Основным недостатком типа string в сравнении с типом char*, есть замедленная скорость обработки данных. Это
связано с тем, что тип string – это, фактически, контейнерный класс. А работа с классом требует дополнительной
реализации программного кода, который, в свою очередь занимает лишнее время.
Какие операторы можно использовать с
объектами класса string?
•
•
•
•
•
•
•
•
•
•
= – присваивание
+ – конкатенация (объединение строк)
+= – присваивание с конкатенацией
== – равенство
!= – неравенство
< – меньше
<= – меньше или равно
> – больше
>= – больше или равно
[ ] – индексация
// тип string, операции над строками
string s1 = "s-1";
string s2 = "s-2";
string s3;
bool b;
// операция '=' (присваивание строк)
s3 = s1; // s3 = "s-1"
// операция '+' - конкатенация строк
s3 = s3 + s2; // s3 = "s-1s-2"
// операция '+=' - присваивание с конкатенацией
s3 = "s-3"; s3 += "abc"; // s3 = "s-3abc"
// операция '==' - сравнение строк
b = s2==s1; // b = false
b = s2=="s-2"; // b = true
// операция '!=' - сравнение строк (не равно)
s1 = "s1"; s2 = "s2"; b = s1 != s2; // b = true
// операции '<' и '>' - сравнение строк
s1 = "abcd"; s2 = "de"; b = s1 > s2; // b = false
b = s1 < s2; // b = true
// операции '<=' и '>=' - сравнение строк (меньше или равно, больше или равно)
s1 = "abcd"; s2 = "ab"; b = s1 >= s2; // b = true
b = s1 <= s2; // b = false
b = s2 >= "ab"; // b = true
// операция [] - индексация
char c; s1 = "abcd";
c = s1[2]; // c = 'c' c = s1[0]; // c = 'a'
Пример
Ввод-вывод строк
• Строка выводится точно так же, как и числовые значения:
cout << S;
• Для считывания строки можно использовать операцию ">>" для объекта cin:
cin >> S;
• В этом случае считывается строка из непробельных символов, пропуская пробелы и концы строк. Это
удобно для того, чтобы разбивать текст на слова, или чтобы читать данные до конца файла при
помощи while (cin >> S).
• Можно считывать строки до появления символа конца строки при помощи функции getline. Сам
символ конца строки считывается из входного потока, но к строке не добавляется:
getline(cin S);
Методы строк. Resize
• S.resize(n) - Изменяет длину строки, новая длина строки становится
равна n. При этом строка может как уменьшится, так и увеличиться.
Если вызвать в виде S.resize(n, c), где c - символ, то при увеличении
длины строки добавляемые символы будут равны c.
Методы строк. Clear. Empty
• S.clear() - очищает строчку, строка становится пустой.
• S.empty() - возвращает true, если строка пуста, false - если непуста.
Методы строк. Push_back. Erase
• S.push_back(c) - добавляет в конец строки символ c, вызывается с
одним параметром типа char.
• S.erase(pos) - удаляет из строки S с символа с индексом pos и до конца
строки.
• S.erase(pos, count) - удаляет из строки S с символа с индексом pos
количеством count или до конца строки, если pos + count > S.size().
Методы строк. 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.
Методы строк. 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.
Методы строк. Substr
• S.substr(pos) - возвращает подстроку данной строки начиная с символа
с индексом pos и до конца строки.
• S.substr(pos, count) - возвращает подстроку данной строки начиная с
символа с индексом pos количеством count или до конца строки, если
pos + count > S.size().
Методы строк. 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.
Методы строк. 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 должно быть задано.
Методы строк. rfind
• Ищет последнее вхождение подстроки ("правый" поиск). Способы
вызова аналогичны способам вызова метода find.
Скачать