2017-01-29 10 views
0

В системе со словом длиной 2^n действительные строковые позиции нумеруются от 0 до 2^n-1. Если say string :: find() находит символ в последней позиции, он возвращает 2^n-1. Если он не находит все, он возвращает 2^n-1, , что эквивалентно -1. Как отличить два случая?Как отличить, не найден ли наш персонаж в последней позиции?

Это то, что я спросил во второй половине удаляемого вопроса https://stackoverflow.com/questions/41919438/why-size-t-is-unsigned?noredirect=1#comment71022993_41919438

+0

Если у вас есть много символов в строке, вы можете пересмотреть свой дизайн. :) Что касается решения вашего вопроса, попробуйте вместо этого использовать ['std :: find'] (http://en.cppreference.com/w/cpp/algorithm/find), поскольку он использует итераторы. –

+0

Допустимые строковые позиции до 'max_size()', которые не могут быть 2^n, потому что вы не можете записать это число вниз, поэтому -1 автоматически доступно – harold

+0

@harold Но -1 в дополнении второго дает значение со всеми бит, который является наивысшим представимым значением с этой шириной и равным 2^n ** - 1 **, не так ли? – Downvoter

ответ

0

Если ваши строки не очень долго, значение для конца строки должно отличаться от не найденного значения. Если значение, возвращаемое из строки :: find, равно std::string::npos, то фраза не может быть найдена внутри строки.