※ ChatGPTを利用し、要約された質問です(原文:マージ型文字列のデリミタ2文字以上のSplit関数のようなものは実現できますか?)
マージ型文字列のデリミタ2文字以上のSplit関数は実現可能か?
このQ&Aのポイント
String::Splitはwchar_tのように1文字だけしか使えないため、2文字以上のデリミタに対応したsplit関数を探しています。
以下のソースコードでは、2文字以上の任意のデリミタでマージ型文字列を配列にしたいです。
.NETはVista以降でも廃れることはないため、覚えて無意味ではありません。
マージ型文字列のデリミタ2文字以上のSplit関数のようなものは実現できますか?
素人で間違っているかもしれませんが、String::Splitは wchar_tのように1文字だけしか使えないので、\r\nのような2文字以上のデリミタに対応しているperlのsplit関数みたいのを探しています。
以下のソースで※ここですの部分で、2文字以上の任意のデリミタでマージ型文字列を配列にしたいです。
.NETは覚えたてですが、Vista以降でも廃れることは無いのでしょうか?
覚えて無意味はきついので・・・
/*
VC++2005でperlのようなsplit関数を実現したい
区切り文字は\r\n
*/
using namespace System;
int main( array<String^>^ args ){
String^ str = nullptr;
if (1 > args->Length ){
str = "太郎\r\n花子\\純一郎";
} else {
str = args[0];
}
// strマージ文字列をPerlのsplit関数のようなもので、以下のようなnamesを作成したい。
// $names = split /\r\n/ $str; <=※ここです。
array<String^> ^names = { "太郎", "花子", "純一郎" };
String^ name;
for each ( name in names ) {
Console::WriteLine("{0}", name);
}
return 0;
}
補足
ご指摘どおり、以下のように修正して動作しました。 ありがとうございました。 しかし、コマンドラインで test a\r\nb\r\ncとした場合、splitせず そのままa\r\nb\r\ncと表示されます。 str = L{args[0]};とする必要があるのでしょうか? /* VC++2005でperlのようなsplit関数を実現したい 区切り文字は\r\n */ using namespace System; int main( array<String^>^ args ){ String^ str = nullptr; if (1 > args->Length ){ str = "太郎\r\n花子\r\n純一郎"; } else { str = args[0]; } array<String^>^separator = {L"\r\n"}; //array<String^> ^names = { "太郎", "花子", "純一郎" }; array<String^>^names = str->Split( separator, System::StringSplitOptions::RemoveEmptyEntries); String^ name; for each ( name in names ) { Console::WriteLine("{0}", name); } return 0; }