从基数11到10 c ++的转换

时间:2016-03-02 05:56:12

标签: c++ string

此代码可以从base 11转换为base 10:

#include <iostream>
#include <string>
using namespace std;
int main ()
{
    string str;
    cout <<"CONVERSION\n\n";
    cout <<"Base 11 to Decimal\n";
    cout << "Base 11: ";
    getline (std::cin,str);
    unsigned long ul = std::stoul (str,nullptr,11);
    cout << "Decimal: " << ul << '\n';
    return 0;
}

但是当我输入未包含在基础11中的B-Z时,程序停止,我想要发生的是这样的

enter image description here

如果用户输入无效变量,程序应该说“输入无效”。请帮忙

1 个答案:

答案 0 :(得分:3)

您可以使用std::string::find_first_not_of

...
getline (std::cin,str);
const auto bad_loc = str.find_first_not_of("0123456789aA");
if(bad_loc != std::string::npos) {
  throw "bad input"; // or whatever handling
}
unsigned long ul = std::stoul (str,nullptr,11);
...