C ++ / CLI - 将具有未知空格数的字符串拆分为分隔符?

时间:2012-08-12 20:33:04

标签: visual-c++ c++-cli

我想知道在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”,加载的第二行是“”(没有),加载的第三行也是“”(没有),第四行line也是“”没有,加载的第五行是“PartNumberTwo”,第六行是PartNumber3。

我只想加载ThisISSomeTxt和PartNumberTwo :?我怎么能这样做?

3 个答案:

答案 0 :(得分:1)

为什么不使用System::String::Split(..)

答案 1 :(得分: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 );
   }
}

答案 2 :(得分:1)

我认为你可以用String.Split方法做你需要做的事情。

首先,我认为您期望'count'参数的工作方式不同:您传入2,并期望返回第一个和第二个结果,并且第三个结果将被抛出。实际返回的是第一个结果,第二个结果是第三个结果连成一个字符串。如果您想要的只是ThisISSomeTxtPartNumberTwo,那么您需要在前2个之后手动丢弃结果。

据我所知,您不希望返回字符串中包含任何空格。如果是这样的话,我认为这就是你想要的:

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'