2012-08-12 96 views
1

我想知道如何(以及在​​哪種方式最好做到這一點)在C++/CLI中將一個字符串與未知數量的空格分隔爲分隔符?C++/CLI - 將未知數量的空格作爲分隔符拆分字符串?

編輯:問題是空間數是未知的,所以當我嘗試使用split方法是這樣的:

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」,加載的第二行是「」(無),加載的第三行也是「」(無),第四行行也是「」什麼都沒有,第五行加載的是「PartNumberTwo」,第六行是PartNumbe R3。

我只想要ThisissomeTxt和PartNumberTwo加載:?我怎樣才能做到這一點?

+0

在這裏看到:http://stackoverflow.com/questions/53849/how-do-i-tokenize -a-string-in-c boost庫會有很大幫助。 – FreudianSlip 2012-08-12 20:38:28

+0

我沒有使用boost:/這是必須的某種方式來與.net框架做到這一點?如果可以在C#中完成,使用託管C++很容易轉換爲C++/CLI – HalfEvil 2012-08-12 20:40:48

+0

?爲什麼在標籤中使用C++ 11? – Gir 2012-08-12 20:42:01

回答

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); 
    } 
} 
+0

我已經添加更多信息給我的問題:) – HalfEvil 2012-08-13 10:30:00

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' 
相關問題