46

重複の可能性:
C++ で文字列を int に解析する方法は?

C++ 文字列を int に変換するにはどうすればよいですか?

文字列に実際の数字 (「1」、「345」、「38944」など) が含まれていると想定しているとします。

また、boost がなく、古い C の方法ではなく、C++ の方法で実際に実行したいとします。

4

8 に答える 8

74
#include <sstream>

// st is input string
int result;
stringstream(st) >> result;
于 2008-10-14T05:44:55.510 に答える
33

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");

文字列形式と数値形式の間で変換し、元に戻す方法を提供します。その下で文字列ストリームを使用しているため、ストリームにマーシャリングしてからストリームからアンマーシャリングできるものはすべて (>> および << 演算子を見てください)。

于 2008-10-14T05:37:08.567 に答える
4

以前に C++ コードで次のようなものを使用したことがあります。

#include <sstream>
int main()
{
    char* str = "1234";
    std::stringstream s_str( str );
    int i;
    s_str >> i;
}
于 2008-10-14T05:48:54.470 に答える
4

C++ FAQ ライト

[39.2] std::string を数値に変換するにはどうすればよいですか?

https://isocpp.org/wiki/faq/misc-technical-issues#convert-string-to-num

于 2008-10-15T17:45:41.730 に答える
2

boost::lexical_castへの投票を追加しましょう

#include <boost/lexical_cast.hpp>

int val = boost::lexical_cast<int>(strval) ;

エラーbad_lexical_castが発生します。

于 2008-11-20T00:54:01.660 に答える
0

アトイを使う

于 2008-10-14T05:39:44.130 に答える
0

おそらく、私は質問を誤解しています. なぜatoiを使いたくないのでしょうか? 車輪の再発明には何の意味もありません。

ここでポイントを逃しているだけですか?

于 2008-10-14T11:57:57.753 に答える
-6

「stdapi.h」で

StrToInt

この関数は、結果と、変換に使用された文字数を示します。

于 2008-10-14T05:45:58.550 に答える