【C++/CLI】文字列の分割(System.String.Splitメソッド)

文字列を特定の文字で分割し、Stringの配列に格納するには

System.String.Splitメソッド

を用います。
CSVファイルを読み込む時などはカンマ(,)で区切るので、このSplitメソッドを使います。

 

このメソッドの定義は

array^ Split (
    array<String^>^ separator,
    StringSplitOptions options
)

 

パラメータ

separator

分割する文字列をString配列で指定します。

options

StringSplitOptions::Nodeを指定すると分割した文字列が空の場合でもそのまま返します。
StringSplitOptions::RemoveEmptyEntriesを指定すると分割した文字列が空の場合、除去されます

 

【サンプルプログラム】

String^ SrcText = "A,B;C,,E,F";

//分割する文字列の配列
array<String^>^ SepString ={",", ";"};

//文字列の分割
array<String^>^ TextArr1 = SrcText->Split(SepString, StringSplitOptions::RemoveEmptyEntries);
array<String^>^ TextArr2 = SrcText->Split(SepString, StringSplitOptions::None);

このコードを実行し、TestArr1とTestArr2の中身をウォッチで確認すると、以下の通りとなります。

 

 

区切り文字が1つの場合は

array<String^>^ TextArr3 = SrcText->Split(‘,’);

のように区切ることもできます。
ただし、この場合はシングルクォーテーション( )なので注意して下さい。

【C++/CLI】改行文字

メッセージボックスなどの文字列を改行させる時には

System.Environment.NewLineプロパティ

を用います。

以下、サンプルと実行例です。

 

【サンプルプログラム】

private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
         button1->Text = "1行目の文字列" + Environment::NewLine +
                                 "2行目の文字列";
         label1->Text  = "1行目の文字列" + Environment::NewLine +
                                "2行目の文字列";

         MessageBox::Show("ボタンとラベルの文字列が" + Environment::NewLine +
                                       "変更されました。");
     }

 

【実行例】

 

ボタンやラベルに関しては、プロパティウィンドウで文字列を入力すると改行も繁栄されます。

また、System.Environment.NewLineプロパティを使わずとも、\n\rを使って

 

MessageBox::Show(“ボタンとラベルの文字列が\r\n変更されました。”);

 

のように書くことも可能です。

 

【C++/CLI】テキストボックスの文字列を変数へ代入

テキストボックスの文字列はtextbox1->Textのようにすると取得できますが、この文字列を数値へ変換するには各型に用意されているParseメソッドを使います。

 

(例)
int Val= int::Parse(textbox1->Text);

 

文字列変換する型は必要に応じて変えてください。
ただし、この場合、テキストボックスに数値ではない文字列が入力された場合、エラーとなるので、エラー処理を行う場合はTryParseメソッドを用います。

(例)
int Val;
bool result = int::TryParse(textbox1->Text, Val );

 

テキストボックスの文字列がint 型として判断された場合、変数(上の例ではVal)に値が代入され、戻り値(result)にtrueが戻されます。
失敗した場合は戻り値がfalseとなります。

 

このエラー処理を用いると、数値としてByte型の値(0~255)が欲しいときなど便利です。

 

(例)
Byte Val ;
bool result = Byte::TryParse(textbox1->Text, Val );

 

詳細はmsdn2の「Int32.TryParse メソッド 」に記載されています。