Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 [ 151 ] 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239

S = "new long value": При перераспределении памяти г и р

становятся недействительными г = "Х": ОШИБКА: непредсказуемые последствия

*р = "Y"; ОШИБКА: непредсказуемые последствия

Для предотвращения ошибок времени выполнения необходимо зарезервировать достаточную емкость функцией reserve() перед инициализацией г и р.

Ссылки и указатели, ссылающиеся на символы строки, становятся недействительными при выполнении следующих операций:

О обмен значений функцией swap();

О чтение нового значения оператором >> или функцией getllne();

О экспорт содержимого строки функцией data() или c str();

О вызов любой из неконстантных функций класса at(), begin(), rbegin(), end() или rend() без оператора [];

О вызов оператора [] после любой из функций at(), begln(), rbeglnQ, end() или rend().

Данные условия также относятся к итераторам (см, с. 480).

Операции сравнения

Для строк определены стандартные операторы сравнения, В качестве операндов могут использоваться как строки, так и С-строки:

std;:str1ng sl.s2:

si == s2 Возвращает true, если si и s2 содержат одинаковые символы si < "hello" Проверяет, что si меньше С-строки "hello"

При сравнении строк операторами <, <=, > и >= символы сравниваются в лексикографическом порядке в соответствии с их текущими трактовками. Например, все следующие условия равны true:

std std std

str1ngC"aaaa") < std strlngCaaaa") < std stringCaaaa") < std

string("bbbb") str1ng("abba") stringCaaaaaa"

При помощи функций compareO можно сравнивать подстроки. Эти функции позволяют использовать более одного аргумента для определения строк, поэтому подстрока может задаваться индексом и длиной. Помните, что функции compare() возвращают не логический признак, а целочисленный код. Ноль является признаком совпадения строк; отрицательное значение указывает на то, что *this меньше заданной строки, а положительное значение - что *this больше. Пример:

std::strlng sCabcd");

s.compareCabcd") Возвращает О

s.compareCdcba") Возвращает значение <0 Cs меньше)

s.compareC"ab") Возвращает значение >0 (s больше)

s.conipare(s) Возвращает О (s равно s)



s.compare(0.2.5,2.2) Возвращает значение <0 ("аЬ" меньше "cd")

S.compared.2."bcx".2) Возвращает О ("be" равно "be")

Если сравнение должно производиться по другому критерию, вы можете оп-ределрггь этот критерий и воспользоваться алгоритмами сравнения STL (пример приводится на с. 480) или же применить специальные трактовки символов, позволяющие сравнивать строки без учета регистра символов. Но так как строки со специальным классом трактовок относятся к другому типу данных, они не могут комбинироваться с объектами типа string (см. пример на с. 485).

В программах, ориентированных на международный рынок, строки иногда приходится сравнивать в соответствии с локальным контекстом. Для этой цели в классе locale определен удобный оператор () (см. с. 676). Он использует фацет контекстного сравнения, предназначенный для сравнения строк с учетом национальных стандартов. За подробностями обращайтесь на с. 697.

Модификация строк

Модификация строк производится различными операторами и фушсциями классоа

Присваивание

Оператор = присваивает строке новое значение, заданное в виде строки, С-строки или отдельного символа. Если новое значение описывается несколькими аргументами, для его присваивания можно воспользоваться функцией assign(). Пример:

const std::strlng aStringCothello"): std::str1ng s;

s = aString: Присваивание строки "othello"

s = "two\nllnes"; Присваивание С-строки

s = ; Присваивание отдельного символа

s.assign(aString): Присваивание "othello" (эквивалент оператора =) s.ass1gn(aStrlng,l.3): Присваивание подстроки "the" s.asslgn(aStr1ng.2.std::str1ng::npos): Присваивание подстроки "hello"

s.asslgn("two\nl1nes"); Присваивание С-строки (эквивалент оператора -) s.assign("nico".5): Присваивание символьного массива: n.i.c.oAO s.ass1gn(5."х"); Присваивание символьного массива: х.х.х.х.х

Также строке можно присвоить интервал символов, заданный двумя итераторами. За подробностями обращайтесь на с. 480.

Обмен значений

В типе string, как и во многих нетривиальных типах, определена специализированная версия функции swap(), которая меняет местами содержимое двух строк (глобальная функция swap() представлена на с. 81). Специализация swap() для строк гарантирует постоянную сложность, поэтому ее рекомендуется использовать для обмена строковых значений и присваивания, если присвоенная строка становится ненужной после выполнения операции.



Очистка строк

Существует несколько способов удаления всех символов строки: std::str1ng s:

s = Присваивание пустой строки

s.clearO; Очистка строки

s.eraseC): Удаление всех символов

Вставка и удаление символов

в классе string определены многочисленные функции вставки, удаления и замены символов строки. Присоединение символов в конец строки выполняется оператором +=, функциями append() и pusli baclc(). Пример:

const std::string aStringC"othello"): std::string s;

s aString; Присоединение строки "othello"

s += "two\n1ines": Присоединение С-строки

s += "Xn": Присоединение отдельного символа

s.appendCaString): Присоединение строки "othello" (эквивалент +=) s.append(aString.l.3): Присоединение подстроки "the" s.append(aString.2.std;:string::npos); Присоединение подстроки "hello"

s.append("two\nllnes"): Присоединение С-строки (эквивалент +=) s.append("nico",5); Присоединение символьного массива: n,i.c.o.\0 s.append(5."х"): Присоединение пяти символов: х.х.х.х.х

s.push back(\n): Присоединение одного символа (эквивалент +=*)

Оператор += присоединяет строковое значение, определяемое одним аргументом. Функция appendO позволяет определить присоединяемое значение несколькими аргументами. Одна из перегруженных версий appendO присоединяет к строке интервал символов, заданный двумя итераторами (см. с. 480). Поддержка функции pusli baclc() была добавлена для конечных итераторов вставки, чтобы алгоритмы STL могли использоваться для присоединения символов к строкам (конечные итераторы вставки рассматриваются на с. 275, а пример их применения со строками приведен на с. 480).

Функция insertO, предназначенная для вставки символов, также существует в нескольких версиях. При вызове функции передается индекс символа, за которым вставляются новые символы:

const std::string aString("age"): std::string s("p"):

s.insert(l.aString); s:page s.insertd. "ersifl"): s:persiflage



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 [ 151 ] 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239