9 ответов:
это означает, что не найден.
обычно это определяется так:
static const size_t npos = -1;лучше сравнивать с НКО, а не -1, потому что код более читаемым.
string::nposконстанта (наверное-1), представляющая не-позиции. Он возвращается методомfindкогда шаблон не был найден.
документ
string::nposговорит:NPO-это постоянное значение статического члена с максимально возможным значением для элемента типа size_t.
в качестве возвращаемого значения он обычно используется для обозначения сбоя.
эта константа фактически определяется со значением -1 (для любого признака), которое, поскольку size_t является беззнаковым целочисленным типом, становится максимально возможным представимым значением для этого типа.
size_tявляется беззнаковой переменной, поэтому 'unsigned value = - 1' автоматически делает его максимально возможным значением дляsize_t: 18446744073709551615
std::string::nposэто реализация определенного индекса, который всегда находится за пределами любогоstd::stringэкземпляра. Различныеstd::stringфункции возвращают его или принимают его для сигнала за пределами конца строки ситуации. Он обычно имеет некоторый беззнаковый целочисленный тип и его значение обычноstd::numeric_limits<std::string::size_type>::max ()который (благодаря стандартным целочисленным акциям) обычно сопоставим с-1.
мы должны использовать
string::size_typeдля возвращаемого типа функции find в противном случае сравнение сstring::nposможет не работать.size_type, который определяется распределителем строки, должен бытьunsignedцелочисленный тип. Распределитель по умолчанию, распределитель, использует типsize_tкакsize_type. Потому что-1is преобразованный в беззнаковый интегральный тип, NPO-это максимальное беззнаковое значение его типа. Однако, точное значение зависит от точного определения типаsize_type. К сожалению, эти максимальный значения различаются. На самом деле,(unsigned long)-1отличается от(unsigned short)-1 если размер типы различаются. Таким образом, сравнениеidx == std::string::nposможет дать false, если idx имеет значение
-1и idx иstring::nposесть разные типы:std::string s; ... int idx = s.find("not found"); // assume it returns npos if (idx == std::string::npos) { // ERROR: comparison might not work ... }один из способов избежать этой ошибки-проверить, не происходит ли сбой поиска напрямую:
if (s.find("hi") == std::string::npos) { ... }однако, часто вам нужен индекс соответствующей позиции символа. Таким образом, еще одно простое решение это определить свой собственный подписанное значение для НКО:
const int NPOS = -1;теперь сравнение выглядит немного иначе и еще удобнее:
if (idx == NPOS) { // works almost always ... }
.4 - "static const size_type npos = -1;"он возвращается строковыми функциями, указывающими на ошибку / не найден и т. д.
NPO-это просто значение токена, которое говорит вам, что find() ничего не нашел (вероятно, -1 или что-то в этом роде). find () проверяет первое появление параметра и возвращает индекс, с которого начинается параметр. Например,
string name = "asad.txt"; int i = name.find(".txt"); //i holds the value 4 now, that's the index at which ".txt" starts if (i==string::npos) //if ".txt" was NOT found - in this case it was, so this condition is false name.append(".txt");
Comments