STL wstring

Store App で STL wstring を使います。

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

STL wstring

  1. Windows8.1 で STL の wstring を使います。
    Windowsストアアプリでは、文字コードは MultiByte(Sift-JIS) から Unicode(utf-16) に変わっています。
    そこで STL の wstring(Unicode)をテストしてみました。 (^o^)/
    文字コードの説明は Program Guid を参照して下さい。
    STL の string(Sift-JIS)は Win8 STL string を参照して下さい。
  2. Windows 8 のプロジェクトは、そのままでは Windows 8.1 で開くことが出来ないようです。
    Visual Studio Professional 2003 を起動します。
    [ファイル][新規作成][プロジェクト][Visual C++]から[新しいアプリケーション(XAML)]を選びます。
    MainPage.xaml に Button を貼り付けて、Event Handler を設定して下さい。
  3. STL の wstring を使うときは、ヘッダファイルと using の記述が必要です。
    #include <string>
    using namespace std;
    
  4. メッセージを表示する Debug() 関数を作成します。
    後位参照が起こらないように MainPage.xaml.cpp の using の直後にでも置いて下さい。
    void Debug(String^ msg, int n)
    {
        String^ message = ref new String(msg->Data());
        message += "  ";
        message += n.ToString();
        message += "\r\n";
        OutputDebugString(message->Data());
    }
    
  5. Button Click に STL の wstring をテストするコードを書きます。
    wstring s に文字列を格納して印字してみました。
    void App1::MainPage::Button_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
    {   wstring s;
        s = L"12, 3.45, {67}, { ab }; XYZ\r\n";
        OutputDebugString(s.data());
    }
    
  6. 続いて wstring s から Token を切り出してみましょう。
    wk= s.find_first_not_of(L" ,;{}", Col); で、Col の位置から Token の始まりを調べます。
    L" ,;{}" 以外が見つかった位置が Token の開始位置です。
    wk= s.find_first_of(L" ,;}\r\n", Col); で Token の終わりを調べます。
    L" ,;}\r\n" のいずれかが格納されている位置が Token の終了位置です。
    Word.assign(s, Col, wk-Col); で、Col から wk-Col 文字を Work に格納します。
    void App1::MainPage::Button_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
    {
        wstring s;
        s = L"12, 3.45, {67}, { ab }; XYZ\r\n";
        OutputDebugString(s.data());
    
        // Token を切り出す
        wstring Word;
        int    Size, Col, wk;
        Size = s.length() - 1;
    
        for (Col = 0; Col<Size;)
        {
            wk = s.find_first_not_of(L" ,;{}", Col);
            Debug(L"Left=", wk);
            Col = wk;
            wk = s.find_first_of(L" ,;}\r\n", Col);
            Debug(L"Right=", wk);
            if (wk == Col)  break;
            Word = Word.assign(s, Col, wk - Col);
            OutputDebugString(Word.data());
            OutputDebugString(L"\r\n");
            Col = wk + 1;
        }
    }
    
  7. コンパイル&実行して、Button を Click すると、出力ウインドウに実行結果が印字されます。
    出力ウインドウには、プログラムの進行メッセージが沢山印字されているので、その中から探して下さい。
    12, 3.45, {67}, { ab }; XYZ
    Left=  0
    Right=  2
    12
    Left=  4
    Right=  8
    3.45
    Left=  11
    Right=  13
    67
    Left=  18
    Right=  20
    ab
    Left=  24
    Right=  27
    XYZ
    

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