#c #string #binary #integer #literals
#c #строка #двоичный #целое число #литералы
Вопрос:
Могу ли я добавить префикс двоичного литерала в c перед введенным пользователем значением int.
#include <iostream>
using namespace std;
int main () {
int n1;
cin>>n1;
string s1 = to_string(n1);
string s2 = "0b";
string s=s2 s1;
int n=stoi(s);
cout<<n;
return 0;
}
Я попробовал это, но потерпел неудачу, так как stoi() считывает только 0 и пропускает остальное
Ответ №1:
По-прежнему нет способа считывания двоичного числа непосредственно из стандартного ввода. Любое автоматическое определение основы не поддерживается "0b"
, поэтому stoi()
останавливается при 'b'
достижении.
Если s
std::string
это чтение из стандартного ввода ( std::cin >> s;
возможно), без "0b"
префикса, тогда вы можете использовать
#include <cstdlib>
char* end;
long n = std::strtol(s.c_str(), amp;end, 2/*radix of 2 denotes binary*/);
проверка указателя end
на случай, если в нем присутствуют недопустимые двоичные цифры s
.
Обратите внимание, что я использую strtol
, а не stoi
как int
может иметь верхние пределы до 32767.