На этом шаге мы рассмотрим особенности использования аргументов в строковых операциях.
Стандартная библиотека поддерживает множество операций, предназначенных для работы со строками. В частности, операции, изменяющие содержимое строки, обычно существуют в нескольких перегруженных версиях, в которых новое значение задается одним, двумя или тремя аргументами. Во всех операциях такого рода используется схема передачи аргументов, представленная в таблице 1.
Операция | Описание |
---|---|
const string& str | Вся строка str |
const string& str, size_type idx, size_type num | He более первых num символов str, начиная с индекса idx |
const char* str | Вся С-строка |
const char* chars, size_type len | Первые len символов символьного массива chars |
char c | Символ c |
size_type num, char с | Num экземпляров символа c |
iterator beg, iterator end | Все символы в интервале [beg,end) |
Обратите внимание: только в одноаргументной версии с передачей char* символ \0 интерпретируется как специальный символ, завершающий строку. В остальных случаях \0 не считается специальным символом.
std::string s1("nico"); // s1 инициализируется символами n, i, c, о std::string s2("nico",5); // s2 инициализируется символами n, i, c, о, \0 std::string s3(5,'\0'); // s3 инициализируется символами \0, \0, \0, \0, \0 s1.length() // Результат равен 4 s2.length() // Результат равен 5 s3.length() // Результат равен 5
Таким образом, в общем случае строка состоит из произвольных символов. Например, в нее можно загрузить содержимое двоичного файла.
В таблице 2 приведена краткая сводка аргументов, используемых различными операциями.
Полная строка | Часть строки | С-строка (char*) | Массив char | Отдельный символ | num символов | Интервал итераторов | |
---|---|---|---|---|---|---|---|
Конструкторы | Да | Да | Да | Да | - | Да | Да |
= | Да | - | Да | - | Да | - | - |
assign() | Да | Да | Да | Да | - | Да | Да |
+= | Да | - | Да | - | Да | - | - |
append() | Да | Да | Да | Да | - | Да | Да |
push_back() | - | - | - | - | Да | - | - |
insert(), индексная версия | Да | Да | Да | Да | - | Да | - |
insert(), итераторная версия | - | - | - | - | Да | Да | Да |
replace (), индексная версия | Да | Да | Да | Да | Да | Да | - |
replace (), итераторная версия | Да | - | Да | Да | - | Да | Да |
Поисковые функции | Да | - | Да | Да | Да | - | - |
+ | Да | - | Да | - | Да | - | - |
==, !=, <, <=, >, >= | Да | - | Да | - | - | - | - |
compare() | Да | Да | Да | Да | - | - | - |
На следующем шаге мы рассмотрим отсутствующие операции.