Console Split

2019
3
4

C:\DATA\StoreC\01Console\05Con_Split\Debug\ConsoleApplication1.exe (プロセス 10100) は、コード 0 を伴って終了しました。
デバッグの停止時にコンソールを自動的に閉じるには、
[ツール]->[オプション]->[デバッグ]->[デバッグの停止時に自動的にコンソ ールを閉じる] を有効にします。
このウィンドウを閉じるには任意のキーを押してください . . .
文字列(L"2019/03/04/")を「/,」で切り分けて STL vector<int> で返します。

前田稔の超初心者のプログラム入門

プログラムの説明

  1. C++ ストアアプリの文字列や配列は非力で、STL を使う方法がお勧めです。
    文字列を「/,」で切り分けて STL の vector<int> に格納する関数を作成します。
  2. Visual Studio を起動して新規作成から [C++ コンソールアプリ]"Hello World" を選びます。
    コンパイルして実行するとコンソール画面に "Hello World!" が印字されます。
  3. ConsoleApplication1.cpp を修正します。
    split(std::wstring str) 関数が文字列を切り分けて STL の vector に格納する関数です。
    C# の Split() が使えたら簡単に切り分けられるのですが、残念ながら C++ では使えません。
    split() に渡される文字列は STL の wstring です。
    先頭から[,/]を検出して Word.assign(str, Col, wk - Col); で文字列を切り出します。
    切り出した文字列を int に変換して v.push_back(_wtoi(Word.data())); で vector に格納します。

    main() から split(L"2019/03/04/"); で関数を呼び出して vector<int> v; で受け取ります。
    受け取った vector を iostream でコンソール画面に印字しています。
    #include <iostream>
    #include <vector>
    #include <string>
    using namespace std;
    
    std::vector<int> split(std::wstring str)
    {   std::vector<int> v;
        std::wstring Word;
        int    Size, Col, wk;
        Size = str.length() - 1;
    
        for (Col=0; Col<Size;)
        {
            wk = str.find_first_not_of(L" ,/", Col);
            Col = wk;
            wk = str.find_first_of(L" ,/", Col);
            if (wk==Col)    break;
            Word = Word.assign(str, Col, wk - Col);
            v.push_back(_wtoi(Word.data()));
            Col = wk + 1;
        }
        return v;
    }
    
    int main()
    {   std::vector<int> vect;
        vect = split(L"2019/03/04/");
        for (int i = 0; i < vect.size(); i++)
        {
            std::cout << vect[i] << "\n";
        }
        return 0;
    }
    

超初心者のプログラム入門(C/C++)