C/C++で文字列を数値に変換する方法|sscanf()とstoi()の使い方を解説
この記事では、C/C++において文字列を数値へ変換する方法について詳しく解説します。文字列として入力された数字データを、計算や処理に使える数値型へ変換することは、プログラミングの基本操作の一つです。
C/C++では主に以下の2つの方法で文字列から数値への変換が行えます。
方法1:sscanf()を使う(C言語スタイル)
sscanf()は、標準入力から読み込むscanf()と違い、指定した文字列からフォーマットに従って値を読み取る関数です。C言語から使える伝統的な手法で、C++でも引き続き利用できます。
サンプルコード
#include<stdio.h>
int main(){
const char *str = "12345";
int x;
sscanf(str, "%d", &x);
printf("\nThe value of x : %d", x);
return 0;
}実行結果
The value of x : 12345
この例では、文字列「12345」を%d(int型)として読み込み、変数xに格納しています。double型に変換したい場合は「%lf」、long型なら「%ld」など、フォーマット指定子を変更することで様々な型に対応できます。
方法2:stoi()を使う(C++11以降)
C++11で導入されたstoi()は、std::stringオブジェクトを直接int型に変換できる便利な関数です。文字列の先頭から数値として解釈できる部分を読み取り、それ以降の文字は無視されるという特徴があります。
サンプルコード
#include <iostream>
#include <string>
using namespace std;
int main(){
string str1 = "45";
string str2 = "3.14159";
string str3 = "31337 geek";
int myint1 = stoi(str1);
int myint2 = stoi(str2);
int myint3 = stoi(str3);
cout << "stoi(\"" << str1 << "\") is " << myint1 << '\n';
cout << "stoi(\"" << str2 << "\") is "<< myint2 << '\n';
cout << "stoi(\"" << str3 << "\") is "<< myint3 << '\n';
return 0;
}実行結果
stoi("45") is 45
stoi("3.14159") is 3
stoi("31337 geek") is 31337出力結果からわかるように、小数を含む文字列「3.14159」は整数部分の「3」だけが変換され、後ろに文字が続く「31337 geek」も先頭の数値部分「31337」のみが抽出されます。
その他の変換関数
用途に応じて、以下のような関連関数も活用できます。
- atoi():C言語由来の関数で、char配列をint型に変換します。エラー時の挙動が不定なため注意が必要です。
- stol() / stoll():それぞれlong型・long long型への変換を行います。
- stof() / stod() / stold():float型・double型・long double型への変換に使用します。
まとめ
C言語的なコードではsscanf()やatoi()が、モダンなC++ではstoi()などのstring変換関数が便利です。特にC++11以降の環境では、例外処理(std::invalid_argumentなど)によるエラーハンドリングが可能なstoi()系の関数を使うことで、より安全で堅牢なコードを書くことができます。
-
C/C++のmemcpy()関数の使い方と実例解説
この記事では、C++ STLにおけるmemcpy()関数の動作、構文、および具体的な使用例について詳しく解説します。 memcpy()とは? memcpy()関数は、C++ STLに組み込まれた標準関数の一つで、<cstring>ヘッダーファイルで定義されています。この関数はメモリブロックをコピーするために使用され、あるメモリ位置から別のメモリ位置へ、指定されたバイト数分のデータを転送します。 関数の実行結果は、データのバイナリコピーとなります。重要な点として、memcpy()は終端のNULL文字やその他の終端記号をチェックしません。単純にソースから指定されたバイト数(num)をそ
-
C/C++で学ぶAA木(AA Tree)とは?基本概念と平衡化操作を徹底解説
AA木(AA Tree)とはコンピュータサイエンスにおいて、AA木(AA Tree)とは、順序付きデータを効率的に格納・検索するために実装された平衡木(バランスドツリー)の一種です。AA木は、赤黒木(Red-Black Tree)の変種として扱われます。赤黒木は二分探索木の一形態であり、要素の追加や削除を効率的にサポートします。赤黒木と大きく異なる点は、AA木では赤いノードを右の子としてのみ追加でき、左の子としては配置できないという制約があることです。この制約により、2-3-4木ではなく2-3木をシミュレートすることになり、その結果、木の保守操作が大幅に簡素化されます。赤黒木の平衡化アルゴリズ