• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マージ型文字列のデリミタ2文字以上のSplit関数のようなものは実現できますか?)

マージ型文字列のデリミタ2文字以上のSplit関数は実現可能か?

このQ&Aのポイント
  • String::Splitはwchar_tのように1文字だけしか使えないため、2文字以上のデリミタに対応したsplit関数を探しています。
  • 以下のソースコードでは、2文字以上の任意のデリミタでマージ型文字列を配列にしたいです。
  • .NETはVista以降でも廃れることはないため、覚えて無意味ではありません。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

String.Split メソッド (String[], StringSplitOptions) のタイプでメソッド使えば可能ですよ array<string^>^separator = {L"\r\n"}; names = str->Split( separator, System::SptringSplitOptions::RemoveEmptyEntries); Console::WriteLine( L"{0}", names->Length ); for each ( name in names ) {   Console::WriteLine( L"{0}", name ); } といった具合です

binma
質問者

補足

ご指摘どおり、以下のように修正して動作しました。 ありがとうございました。 しかし、コマンドラインで 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; }

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

>しかし、コマンドラインで test a\r\nb\r\ncとした場合、splitせず コマンドラインで \r\nと与えても Cで扱う CRやLFには変換されません もし \r\nの文字列を区切りとして与えるのであれば C側でエンコードしてあげましょう if ( args.Length < 1 ) {   str = L"デバッグ\r\n用文字\r\n列\r\n" } else {   str = argv[0];   // "\r" -> '\r'変換   str = str.Replase( L"\\r", L"\r" );   // "\n" -> '\n'変換   str = str.Replase( L"\\n", L"\n" ); } といった具合でしょう …

binma
質問者

補足

以下でうまくいきました。 ありがとうございました。 // "\r" → '\r'変換 str = str->Replace( L"\\r", L"\r" ); // "\n" → '\n'変換 str = str->Replace( L"\\n", L"\n" );

すると、全ての回答が全文表示されます。