2017-01-29 5 views
0

在字长为2^n的系统中,有效的字符串位置从0到2^n-1被编号。如果说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但是2的补码-1会产生一个值位设置,这是具有该宽度并且等于2^n ** - 1 **的最高可表示值,不是吗? – Downvoter

回答

0

除非你的字符串是很长,对于字符串结尾值应该是从没有发现值不同。如果从string :: find返回的值等于std::string::npos,则该短语不能在字符串内找到。

相关问题