Подтвердить что ты не робот

Что означает строка:: npos

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

found=str.find(str2);

if (found!=string::npos)
    cout << "first 'needle' found at: " << int(found) << endl;
4b9b3361

Ответ 1

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

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

static const size_t npos = -1;

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

Ответ 2

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

Ответ 3

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

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

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

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

const int NPOS = -1;

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

if (idx == NPOS) { // works almost always
...
}

Ответ 7

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

Ответ 8

$21.4 - "static const size_type npos = -1;"

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

Ответ 9

npos - это только токен, который говорит вам, что find() ничего не нашел (возможно, -1 или что-то в этом роде). find() проверяет первое вхождение параметра и возвращает индекс, с которого начинается параметр. Например,

  string name = "asad.txt";
  int i = name.find(".txt");
  //i holds the value 4 now, that 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");

Ответ 10

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

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

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

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

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

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