C++ 機能のみを使用したシンプルでタイプセーフなソリューションは、次のアプローチです。
#include <iostream>
#include <sstream>
int fromString(const std::string& s)
{
std::stringstream stream;
stream << s;
int value = 0;
stream >> value;
if(stream.fail()) // if the conversion fails, the failbit will be set
{ // this is a recoverable error, because the stream
// is not in an unusable state at this point
// handle faulty conversion somehow
// - print a message
// - throw an exception
// - etc ...
}
return value;
}
int main (int argc, char ** argv)
{
std::cout << fromString ("123") << std::endl; // C++03 (and earlier I think)
std::cout << std::stoi("123") << std::endl; // C++ 11
return 0;
}
注:fromString()
文字列のすべての文字が実際に有効な整数値を形成しているかどうかを確認する必要があります。たとえば、GH1234
何かがそうではなく、 を呼び出した後、値は 0 のままになりますoperator>>
。
編集:変換が成功したかどうかを確認する簡単な方法failbit
は、ストリームの を確認することです。それに応じて回答を更新しました。