Store String

Store App で String を使います。

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

Win10 String

  1. Windows10(Store Mode)では、今までと String の様子が違うようです。
    Windows ストアアプリの C++ が従来の .NET Framework のものではなく、新しい WinRT という API(C++/CX) を利用しています。
    そのために、従来の String に比べて非常に使い勝手が悪くなっています。 (^_^;)
  2. ベースとなるプロジェクト Blank App(XAML) を構築して下さい。
    手順は Windows8 C++(Store App) を参照して下さい。
    String は名前空間 Platform で定義されています。
    using namespace Platform; を定義して下さい。
    using namespace App1;
    using namespace Platform;
    
  3. MainPage.xaml をダブルクリックして、レイアウトウインドウを表示します。
    ツールボックスから Button を貼り付けます。
    ボタンクリックの Event Handler("Button_Click") を設定して下さい。
  4. 実行結果を確認する Debug(String^ msg) 関数です。
    コンソール画面の出力ウインドウに TEXT 形式で印字します。
    この関数はプログラムのデバッグ情報を印字するときに最適です。
    後位参照が起こらないように MainPage.xaml.cpp の using の直後にでも置いて下さい。
    void Debug(String^ msg)
    {
        String^ message= ref new String(msg->Data());
        message+="\r\n";
        OutputDebugString(message->Data());
    }
    
  5. Button_Click に String のテストコードを書きます。
    String^ str に文字列を格納して印字してみました。
    次に String の配列に3個の文字列を格納してみました。
    超初心者のプログラム入門(C#)から「String Array」と比較してみて下さい。
    微妙に書き方が異なるでしょう。 (^_^;)
    void App1::MainPage::Button_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
    {
        String^ str = "1 abc\r\n2 ABC\r\n3 defg\r\n4 DEFG\r\n";
        Debug(str);
    
        Platform::Array<String^>^ str2 = { "Array 1", "Array 2", "Array 3" };
        int  i,j;
        j= str2->Length;
        for(i=0; i<j; i++)
        {
            Debug(str2[i]);
        }
    }
    
  6. コンパイル&実行して、Button を Click すると、出力ウインドウに実行結果が印字されます。
    最初に String^ str の文字列が、続いて Platform::Array<String^>^ str2 の文字列が印字されます。
    出力ウインドウには、プログラムの進行メッセージが沢山印字されているので、その中から探して下さい。
    1 abc
    2 ABC
    3 defg
    4 DEFG
    
    Array 1
    Array 2
    Array 3
    
  7. Windows10 C++ の String は非常に使い勝手が悪く、1文字ずつ参照する機能や、文字列を切り分ける機能は無いようです。 (^_^;)
    従来(Windows7 まで)の String では、添え字による参照や文字列の検索や部分文字列なども扱えたのですが。 (;_;)
    本格的な文字列処理を行うときは、STL の string をお勧めします。
    但し、Windows8 の String は Unicode が使われるのに対して、STL の string は MultiByte(Shift-JIS) が使われます。
    Unicode(utf-16) を使いたいときは STL wstring を使用します。
  8. C++ Maneged では、Split() メソッドによる文字列の切り分けや Parse() メソッドによる変換が使えました。
    残念ながら Windows C++ ストアアプリでは、これらのメソッドが利用できないようです。
    .NET Framework(Windows7 まで) のプログラム例です。
        int  yy,mm,dd;
        String^ str = "2013/06/20";
        array<String^>^ ymd;
        array<String^>^ sep= {"/", ","};
          ・・・
        ymd= str->Split(sep, StringSplitOptions::None);
        yy= int::Parse(ymd[0]);
        mm= int::Parse(ymd[1]);
        dd= int::Parse(ymd[2]);
    

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