1

C++/CLI で区切り文字として不明な数のスペースを含む文字列を分割する方法 (およびどのように行うのが最善か) を知りたいですか?

編集:問題は、スペース番号が不明であるため、次のように分割方法を使用しようとすると:

String^ line;
StreamReader^ SCR = gcnew StreamReader("input.txt");
while ((line = SCR->ReadLine()) != nullptr && line != nullptr)
{
     if (line->IndexOf(' ') != -1)
        for each (String^ SCS in line->Split(nullptr, 2))
        {
            //Load the lines...

        }
}

そして、これは Input.txt がどのように見えるかの例です:

ThisISSomeTxt<space><space><space><tab>PartNumberTwo<space>PartNumber3

次にプログラムを実行しようとすると、読み込まれる最初の行は「ThisISSomeTxt」で、読み込まれる 2 行目は「」(何もない)、読み込まれる 3 行目も「」(何もない)、4 行目も"" 何もありません。読み込まれる 5 行目は " PartNumberTwo" で、6 行目は PartNumber3 です。

ThisISSomeTxt と PartNumberTwo だけをロードしたい :? これどうやってするの?

4

3 に答える 3

1

必要なことは String.Split メソッドでできると思います。

まず、「count」パラメーターの動作が異なることを期待していると思います: を渡し2、最初と 2 番目の結果が返され、3 番目の結果がスローされることを期待しています。実際に返されるのは、最初の結果と、2 番目と 3 番目の結果が 1 つの文字列に連結されたものです。と のみが必要な場合は、最初の 2 つ以降の結果を手動で破棄する必要がThisISSomeTxtありPartNumberTwoます。

私が知る限り、戻り文字列に空白を含めたくありません。その場合、これがあなたが望むものだと思います:

String^ line = "ThisISSomeTxt   \tPartNumberTwo PartNumber3";
array<String^>^ split = line->Split((array<String^>^)nullptr, StringSplitOptions::RemoveEmptyEntries);
for(int i = 0; i < split->Length && i < 2; i++)
{
    Debug::WriteLine("{0}: '{1}'", i, split[i]);
}

結果:

0: 'ThisISSomeTxt'
1: 'PartNumberTwo'
于 2012-08-13T17:41:41.020 に答える
1

System::String::Split(..)だけを使用しないのはなぜですか?

于 2012-08-12T20:45:12.323 に答える
1

http://msdn.microsoft.com/en-us/library/b873y76a(v=vs.80).aspx#Y0から取得した次のコード例は、Split メソッドを使用して文字列をトークン化する方法を示しています。

using namespace System;
using namespace System::Collections;
int main()
{
   String^ words = "this is a list of words, with: a bit of punctuation.";
   array<Char>^chars = {' ',',','->',':'};
   array<String^>^split = words->Split( chars );
   IEnumerator^ myEnum = split->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      String^ s = safe_cast<String^>(myEnum->Current);
      if (  !s->Trim()->Equals( "" ) )
            Console::WriteLine( s );
   }
}
于 2012-08-12T20:48:50.037 に答える