Console Input

タイプ入力した文字列を STL の vector<string> で返します。

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

プログラムの説明

  1. C++ ストアアプリの文字列や配列は非力で、STL を使う方法がお勧めです。
    コンソールモードでタイプ入力した文字列を STL の vector<string> で返す input() 関数を作成します。
    input() 関数のリターン値を std::vector<string> vect; で受け取って Debug() 関数で印字します。
  2. Visual Studio を起動して新規作成から [C++ コンソールアプリ]"Hello World" を選びます。
    コンパイルして実行するとコンソール画面に "Hello World!" が印字されます。
  3. ConsoleApplication1.cpp を修正します。
    input() 関数はタイプ入力した文字列を STL の vector に格納する関数です。
    C++ では後位参照をしなければ、プロトタイプ宣言を省略することが出来ます。
    iostream でタイプ入力した文字列は char(Shift-jis) の配列で得られます。
    最大40文字分の領域を確保していますが、タイプした長さに合わせて切り捨てられます。
    これを vector<string> に格納してリターンします。
    先頭の文字に「0」をタイプすると関数が終了します。

    Debug(char *str) 関数はデバッグに用いるために作成した関数で、渡された vector の文字列を出力ウインドウに印字します。
    受け取る文字列は char *str なので、16ビットコードに変換して OutputDebugString() で印字します。
    変換する方法は色々あるのですが、今回は MultiByteToWideChar() 関数を使っています。
    MultiByteToWideChar() 関数を使うときは tchar.h を #include して下さい。

    main(void) では vect = input(); でタイプ入力した文字列を STL の vector で受け取ります。
    受け取った文字列を Debug(); 関数で出力ウインドウに印字して確認しています。
    #include <iostream>
    #include <vector>
    #include <windows.h>
    #include <tchar.h>
    using namespace std;
    
    std::vector<string> input()
    {   std::vector<string> str;
        char    s[40];
        while (true)
        {
            cout << "string を入力して下さい\n";
            cin >> s;
            if (s[0]=='0')  break;
            cout << "string=[" << s << "]\n";
            str.push_back(s);
        }
        return str;
    }
    
    void Debug(char *str)
    {   wchar_t   wk[100];
        MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,str,-1,wk,100);
        OutputDebugString(wk);
        OutputDebugString(L"\r\n");
    }
    
    int main(void)
    {
        std::vector<string> vect;
        vect = input();
        for(int i=0; i<vect.size(); i++)
        {   Debug((char *)vect[i].data());  }
        return 0;
    }
    

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