В системе со словом длиной 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
Если у вас есть много символов в строке, вы можете пересмотреть свой дизайн. :) Что касается решения вашего вопроса, попробуйте вместо этого использовать ['std :: find'] (http://en.cppreference.com/w/cpp/algorithm/find), поскольку он использует итераторы. –
Допустимые строковые позиции до 'max_size()', которые не могут быть 2^n, потому что вы не можете записать это число вниз, поэтому -1 автоматически доступно – harold
@harold Но -1 в дополнении второго дает значение со всеми бит, который является наивысшим представимым значением с этой шириной и равным 2^n ** - 1 **, не так ли? – Downvoter