Либо вы беспокоитесь о возможности неверного возвращаемого значения, либо нет.Большинство ответов до сих пор находятся на среднем уровне, перехватывая некоторые строки помимо «0» и «1», возможно, рационализируя то, как их следует преобразовать, возможно, выбрасывая исключение. Неверный ввод не может привести к допустимому выводу, и вы не должны пытаться принять его.
Если вас не волнует неверный возврат, используйте s[0] == '1'
.Это супер просто и очевидно.Если вы должны кому-то оправдать его допуск, скажите, что он преобразует неверный ввод в false, и в вашей реализации STL пустая строка, вероятно, будет одиночной \0
, поэтому она достаточно стабильна.s == "1"
тоже хорошо, но s != "0"
кажется мне тупым и делает недействительным => true.
Если вы заботитесь об ошибках (и, вероятно, должны это сделать), используйте
if ( s.size() != 1
|| s[0] < '0' || s[0] > '1' ) throw input_exception();
b = ( s[0] == '1' );
Это ловит ВСЕ ошибки, это также очевидно и просто для всех, кто знает smidgen C, и ничего не будет работать быстрее.