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



что означает утверждение string::npos означает здесь



found=str.find(str2);

if (found!=string::npos)
cout << "first 'needle' found at: " << int(found) << endl;
547   9  
c++

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.

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

мы должны использовать string::size_type для возвращаемого типа функции find в противном случае сравнение с string::npos может не работать. size_type, который определяется распределителем строки, должен быть unsigned целочисленный тип. Распределитель по умолчанию, распределитель, использует тип size_t как size_type. Потому что -1 is преобразованный в беззнаковый интегральный тип, 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

    Ничего не найдено.