クロの制作日記

C++で数字の文字列(区切り文字つき)をsplitする関数

最初に

某プログラムスキルチェックサイトで「3 19 2」のような、空白で数字が区切られている文字列が入力されることがありました。

そんな場合でも各々の数字をint型として取得する関数を作成しましたので共有します。C++初心者ですので、あまりよろしくない処理を行っている可能性はありますが、そこはご了承ください。

コード

// 数字の文字列(区切り文字つき)をsplitする関数
vector<int> split(string str, char split_word){
    
    // 数字を格納する配列
    vector<int> num_vec;
    
    // 数字を一時保存する変数
    string buf = "";
    
    // 区切り文字を検索し、数字を抽出
    for (int ind = 0; ind < str.length(); ind++)
    {
        // 現在確認している文字が区切り文字でない場合
        if (str[ind] != split_word)
        {
            // bufに文字を追加
            buf.push_back(str[ind]);
            
            // 最後の文字ならばnum_vecに格納
            if (ind==str.length()-1){
                num_vec.emplace_back(atoi(buf.c_str()));
            }
        }
        // 現在確認している文字が区切り文字である場合
        else
        {   
            // 最初の文字の場合は保存する数字がないのでループを飛ばす
            if (buf == "") continue;
            
            // bufに保存している数字をnum_vecに格納
            num_vec.emplace_back(atoi(buf.c_str()));
            // bufを初期化
            buf = "";
        }
    }
    
    // 区切り文字を抜いた数字の配列を返す
    return num_vec;
}

多分、intに変換する箇所を消去 & 返り値をstringにすると普通のsplit関数として使えると思う。