R. Martinho Fernandes の回答の上に構築するには、コードに代わる可能な C++ の代替案を次に示します。
std::string num;
std::getline(std::cin, num);
// Arbitrary logic, e.g.: remove non digit characters from num
num.erase(std::remove_if(num.begin(), num.end(),
std::not1(std::ptr_fun((int(*)(int))std::isdigit))), num.end());
std::stringstream ss(num);
ss >> n;
- この
std::getline関数は から文字を抽出しcin、 に格納しnumます。また、入力の末尾にある区切り文字を抽出して破棄します (独自の区切り文字を指定すること\nも、使用することもできます)。
- この関数は、負の述語を使用して
string::erase、文字列から数字以外のすべての文字を削除します。numstd::remove_ifstd::isdigit
- 次に、文字列は a を使用して整数として表されます
std::stringstream(aboost::lexical_castも同様に機能します)。
ここで消去関数によって実装されるロジックは他のロジックでもかまいませんが、このコードはおそらく質問に含まれているものよりもはるかに読みやすいです。