String npos что значит

Строки в языке C++ (класс string)

В языке 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’ .

Неявно конструктор вызывается при объявлении строки с указанием дополнительных параметров. Например, так:

Подробней о конструкторах для строк читайте здесь.

Ввод-вывод строк

Строка выводится точно так же, как и числовые значения:

cout >» для объекта cin:

В этом случае считывается строка из непробельных символов, пропуская пробелы и концы строк. Это удобно для того, чтобы разбивать текст на слова, или чтобы читать данные до конца файла при помощи while (cin >> S) .

Можно считывать строки до появления символа конца строки при помощи функции getline. Сам символ конца строки считывается из входного потока, но к строке не добавляется:

Арифметические операторы

Со строками можно выполнять следующие арифметические операции:
= — присваивание значения.
+= — добавление в конец строки другой строки или символа.
+ — конкатенация двух строк, конкатенация строки и символа.
== , != — посимвольное сравнение.
, > , , >= — лексикографическое сравнение.

То есть можно скопировать содержимое одной строки в другую при помощи операции S1 = S2, сравнить две строки на равенство при помощи S1 == S2, сравнить строки в лексикографическом порядке при помощи S1 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.

Ищет в данной строке первое вхождение другой строки 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-строку.

Источник

Что означает string :: npos в этом коде?

Что означает фраза std::string::npos в следующем фрагменте кода?

Значит не найдено.

Обычно это определяется так:

Лучше сравнивать с npos вместо -1, потому что код более разборчивый.

string::npos — это константа (вероятно -1 ), представляющая непозицию. Он возвращается методом, find когда шаблон не найден.

В документе string::npos говорится:

npos — это статическое значение константы члена с максимально возможным значением для элемента типа size_t.

В качестве возвращаемого значения оно обычно используется для обозначения сбоя.

Эта константа фактически определяется со значением -1 (для любого признака), которое, поскольку size_t является целочисленным типом без знака, становится максимально возможным представимым значением для этого типа.

size_t является беззнаковой переменной, поэтому ‘unsigned value = — 1’ автоматически делает ее максимально возможным значением для size_t : 18446744073709551615

std::string::npos — это индекс, определяемый реализацией, который всегда выходит за пределы любого std::string экземпляра. Различные std::string функции возвращают или принимают его, чтобы сигнализировать о конце строки. Обычно это какой-то беззнаковый целочисленный тип, и его значение обычно std::numeric_limits ::max () (благодаря стандартным целочисленным предложениям) обычно сопоставимо с -1 .

мы должны использовать string::size_type тип возвращаемого значения функции поиска, иначе сравнение с string::npos может не работать. size_type , который определяется распределителем строки, должен быть unsigned целочисленным типом. Распределитель по умолчанию, распределитель, использует тип size_t как size_type . Поскольку -1 он преобразуется в целочисленный тип без знака, npos является максимальным беззнаковым значением его типа. Однако точное значение зависит от точного определения типа size_type . К сожалению, эти максимальные значения различаются. Фактически, (unsigned long)-1 отличается от (unsigned short)- 1, если размер типов отличается. Таким образом, сравнение

может дать false, если idx имеет значение -1 и idx и string::npos имеет разные типы:

Один из способов избежать этой ошибки — проверить, не завершился ли поиск напрямую:

Однако часто вам нужен индекс соответствующей позиции символа. Таким образом, еще одно простое решение — определить собственное значение со знаком для npos:

Теперь сравнение выглядит немного иначе и даже удобнее:

Источник

Что означает string :: npos в этом коде?

Что означает фраза std::string::npos в следующем фрагменте кода?

11 ответов

Значит не найдено.

Обычно это определяется так:

Лучше сравнивать с npos вместо -1, потому что код более разборчивый.

string::npos — это константа (вероятно, -1 ), представляющая непозицию. Он возвращается методом find , когда шаблон не найден.

В документе для string::npos говорится:

npos — это статическое значение константы члена с максимально возможным значением для элемента типа size_t.

В качестве возвращаемого значения оно обычно используется для обозначения сбоя.

Эта константа фактически определяется со значением -1 (для любого признака), которое, поскольку size_t является целочисленным типом без знака, становится наибольшим возможным представимым значением для этого типа.

size_t — беззнаковая переменная, поэтому ‘unsigned value = — 1’ автоматически делает ее максимально возможным значением для size_t : 18446744073709551615

std::string::npos — это определяемый реализацией индекс, который всегда выходит за пределы любого экземпляра std::string . Различные функции std::string возвращают его или принимают, чтобы сигнализировать о конце строки. Обычно это какой-то беззнаковый целочисленный тип, и его значение обычно std::numeric_limits ::max () , которое (благодаря стандартным целочисленным предложениям) обычно сопоставимо с -1 .

found будет npos в случае невозможности найти подстроку в строке поиска.

Мы должны использовать string::size_type для типа возвращаемого значения функции поиска, иначе сравнение с string::npos может не работать. size_type , который определяется распределителем строки, должен быть unsigned интегральный тип. Распределитель по умолчанию, распределитель, использует тип size_t как size_type . Поскольку -1 преобразованный в беззнаковый целочисленный тип, npos является максимальным беззнаковым значением этого типа. Однако, точное значение зависит от точного определения типа size_type . К сожалению, эти максимальные значения различаются. Фактически, (unsigned long)-1 отличается от (unsigned short)- 1, если размер типы различаются. Таким образом, сравнение

Может дать false, если idx имеет значение -1 , а idx и string::npos имеют разные типы:

Один из способов избежать этой ошибки — проверить, не завершился ли поиск напрямую:

Однако часто вам нужен индекс позиции совпадающего символа. Таким образом, еще одно простое решение — определить собственное подписанное значение для npos:

Теперь сравнение выглядит немного иначе и даже удобнее:

Он возвращается строковыми функциями, указывающими на ошибку / не найдено и т. Д.

Ответ для наших дней C ++ 17, когда у нас есть std::optional :

Если вы немного прищурились и притворились, что std::string::find() возвращает std::optional (что вроде как должно . ) — тогда условие становится:

Значение string :: npos — 18446744073709551615. Это значение возвращается, если строка не найдена.

Статическая константа size_t npos = -1;

Максимальное значение для size_t

Npos — это статическое значение константы члена с максимально возможным значением для элемента типа size_t.

Это значение, когда оно используется в качестве значения параметра len (или subblen) в строковых функциях-членах, означает «до конца строки».

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

Эта константа определяется со значением -1, которое, поскольку size_t является целочисленным типом без знака, это наибольшее возможное представимое значение для этого типа.

Источник

Что означает string:: npos

что делает заявление string::npos означает здесь

9 ответов

это означает, что не найдено.

обычно он определяется следующим образом:

лучше сравнивать с НКО, а не -1, потому что код более читаемым.

string::npos константа (наверное -1 ), представляющая не-позиции. Он возвращается методом find когда шаблон не был найден.

НКО — это статическое постоянное значение члена с максимально возможным значением для элемента типа size_t.

в качестве возвращаемого значения обычно используется для обозначения сбоя.

эта константа фактически определяется значением -1 (для любого признака), которое, поскольку size_t является беззнаковым интегральным типом, становится максимально возможным представимым значением для этого типа.

size_t является беззнаковой переменной, поэтому «unsigned value = — 1» автоматически делает его максимально возможным значением для size_t : 18446744073709551615

std::string::npos — Это определенный индекс реализации, который всегда выходит за рамки любого std::string экземпляра. Различные std::string функции возвращают его или принимают его для сигнала за пределами конца Строковой ситуации. Обычно он имеет некоторый целочисленный тип без знака, и его значение обычно std::numeric_limits ::max () который (благодаря стандартным целочисленным акциям) обычно сопоставим с -1 .

found будет npos в случае невозможности найти подстроку в строке поиска.

мы должны использовать string::size_type для возвращаемого типа функции find в противном случае сравнение с string::npos может не работать. size_type , который определяется распределителем строки, должен быть unsigned целочисленный тип. Распределитель по умолчанию, распределитель, использует тип size_t as size_type . Потому что -1 is преобразованные в беззнаковый интегральный тип, НКО-это максимальное беззнаковое значение его типа. Однако, точное значение зависит от точного определения типа size_type . К сожалению, эти максимальный значения различаются. На самом деле, (unsigned long)-1 отличается от (unsigned short)- 1 если размер типы различаются. Таким образом, сравнение

может дать false, если idx имеет значение -1 и idx и string::npos имеют различные типы:

один из способов избежать этой ошибки-проверить, не происходит ли поиск напрямую:

однако часто вам нужен индекс соответствующей позиции символа. Таким образом, еще одно простое решение это определить свой собственный подписанное значение для НКО:

теперь сравнение выглядит немного по-другому и даже удобнее:

он возвращается строковыми функциями, указывающими на ошибку / не найден и т. д.

Источник

Читайте также:  Анализ мочи билирубин small что это значит
Оцените статью