重複の可能性:
C++ で文字列を int に解析する方法は?
C++ 文字列を int に変換するにはどうすればよいですか?
文字列に実際の数字 (「1」、「345」、「38944」など) が含まれていると想定しているとします。
また、boost がなく、古い C の方法ではなく、C++ の方法で実際に実行したいとします。
重複の可能性:
C++ で文字列を int に解析する方法は?
C++ 文字列を int に変換するにはどうすればよいですか?
文字列に実際の数字 (「1」、「345」、「38944」など) が含まれていると想定しているとします。
また、boost がなく、古い C の方法ではなく、C++ の方法で実際に実行したいとします。
#include <sstream>
// st is input string
int result;
stringstream(st) >> result;
C++ ストリームを使用します。
std::string plop("123");
std::stringstream str(plop);
int x;
str >> x;
/* Lets not forget to error checking */
if (!str)
{
// The conversion failed.
// Need to do something here.
// Maybe throw an exception
}
PS。この基本原則は、boost ライブラリがどのように機能するかlexical_cast<>
です。
私のお気に入りの方法はブーストですlexical_cast<>
#include <boost/lexical_cast.hpp>
int x = boost::lexical_cast<int>("123");
文字列形式と数値形式の間で変換し、元に戻す方法を提供します。その下で文字列ストリームを使用しているため、ストリームにマーシャリングしてからストリームからアンマーシャリングできるものはすべて (>> および << 演算子を見てください)。
以前に C++ コードで次のようなものを使用したことがあります。
#include <sstream>
int main()
{
char* str = "1234";
std::stringstream s_str( str );
int i;
s_str >> i;
}
C++ FAQ ライト
[39.2] std::string を数値に変換するにはどうすればよいですか?
https://isocpp.org/wiki/faq/misc-technical-issues#convert-string-to-num
boost::lexical_castへの投票を追加しましょう
#include <boost/lexical_cast.hpp>
int val = boost::lexical_cast<int>(strval) ;
エラーbad_lexical_cast
が発生します。
アトイを使う
おそらく、私は質問を誤解しています. なぜatoiを使いたくないのでしょうか? 車輪の再発明には何の意味もありません。
ここでポイントを逃しているだけですか?
「stdapi.h」で
StrToInt
この関数は、結果と、変換に使用された文字数を示します。