[解決済み] c++ 文字列からintを解析する [重複]。
2022-03-15 11:54:36
質問
重複の可能性があります。
C++で文字列をint型にパースする方法は?
いろいろ調べてみたのですが、アティオを使えという人もいれば、ダメだという人もいて、とにかくうまくいかないのです。
文字列をint型に変換する正しい方法を教えてください。
string s = "10";
int i = s....?
ありがとうございました。
解決方法は?
-
C++11では
std::stoi
としています。std::string s = "10"; int i = std::stoi(s);
なお
std::stoi
の例外を投げます。std::invalid_argument
変換が実行できない場合、またはstd::out_of_range
変換の結果オーバーフローが発生した場合(すなわち、文字列値がint
型)を使用します。を使用することができます。std::stol
またはstd:stoll
ただしint
は、入力文字列に対して小さすぎるようです。 -
C++03/98では、以下のいずれかを使用することができます。
std::string s = "10"; int i; //approach one std::istringstream(s) >> i; //i is 10 after this //approach two sscanf(s.c_str(), "%d", &i); //i is 10 after this
ただし、上記の2つのアプローチは、入力の
s = "10jh"
. これらは、エラーを通知する代わりに10を返します。したがって、安全で堅牢な方法は、入力文字列を解析し、各文字を検証してそれが数字かどうかをチェックする独自の関数を書き、それに応じて動作させることです。以下に、堅牢な実装を一つ紹介します(未検証)。
int to_int(char const *s)
{
if ( s == NULL || *s == '\0' )
throw std::invalid_argument("null or empty string argument");
bool negate = (s[0] == '-');
if ( *s == '+' || *s == '-' )
++s;
if ( *s == '\0')
throw std::invalid_argument("sign character only.");
int result = 0;
while(*s)
{
if ( *s < '0' || *s > '9' )
throw std::invalid_argument("invalid input string");
result = result * 10 - (*s - '0'); //assume negative number
++s;
}
return negate ? result : -result; //-result is positive!
}
を少し修正したものです。 私の別解 .
関連
-
[解決済み】エラー:free(): 次のサイズが無効です(fast)。
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] intをenumにキャストするにはどうすればよいですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] C#でenumからint値を取得する
-
[解決済み] C++でintをstringに変換する最も簡単な方法
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++エラー。アーキテクチャ x86_64 に対して未定義のシンボル
-
[解決済み】C++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み】抽象クラス型の無効なnew-expression
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。
-
[解決済み】なぜ、サイズ8の初期化されていない値を使用するのでしょうか?
-
[解決済み】Visual Studioのデバッガーエラー。プログラムを開始できません 指定されたファイルが見つかりません
-
[解決済み】C++で文字列をint型にパースする方法は?