文字列から数字を抽出【C++】

C++

文字列に含まれている数字を抜き取り、それをint型として利用したいという場合がある。
その際には、substr関数とstoi関数を利用すると良さそう。

私は毎回調べてしまい、時間がかかる。
特にsubstrメソッドの引数を忘れやすい。

ここにまとめておく。
例を見た方が早いので例を示す。

#include 
using namespace std;

int main(void){
    string s = "abcdefghi";         // sに適当な文字列を代入
    cout << s.substr(2, 3) << endl; // 出力 "cde"
    return 0;
}

簡単に言葉でもまとめておく。

substrメソッドの引数
s.substr(2, 3)とすると, sの2番目から3要素抜き出した文字列を取得

下記のような時間の入力があった時に時間と分を取得する方法を紹介する。

入力例

13:45

C++でのコード

#include 
using namespace std;

int main(void){
    string s;
    cin >> s;   // 13:45をstring型でまず受け取る
    
    int n = 0;  // nには、何番目に「:」が来るのかを代入する
    for (int i = 0; i < s.size(); i++) {
        if (s[i] == ':') {
            n = i;
            break;
        }
    }

    int x = 0, y = 0;                       // xには時間、yには分を代入する
    x = stoi(s.substr(0, n));               // sの0番目からn要素取り出す
    y = stoi(s.substr(n + 1, s.size()));    // sのn+1番目から、s.size()要素取り出す

    cout << x << endl;
    cout << y << endl;

    return 0;
}

出力結果

13
45

コメント