2012-08-12 4 views
1

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"로드 된 두 번째 줄 ""(없음) 프로그램을 실행하려고하면로드 된 세 번째 줄 또한 ""(아무것도), 네 번째 줄 또한 ""아무것도 아니고,로드 된 다섯 번째 줄은 "PartNumberTwo"이고 여섯 번째 줄은 PartNumbe입니다. r3.

이 IsSomeTxt 및 PartNumberTwo 만로드하면됩니다. 어떻게해야합니까?

+0

:

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]); } 

결과 : 그런 경우, 나는 이것이 당신이 원하는 생각 -a-string-in-c 부스트 라이브러리가 크게 도움이 될 것입니다. – FreudianSlip

+0

부스트를 사용하고 있지 않습니다./.net 프레임 워크에서이를 수행하는 방법이 필요합니다. C#으로 변환 할 수 있다면 C++/CLI – HalfEvil

+0

으로 변환하기가 쉽습니다. 태그에 C++ 11이있는 이유는 무엇입니까? – Gir

답변

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

1

String.Split 메서드로 수행해야 할 작업을 수행 할 수 있다고 생각합니다.

먼저 '카운트'매개 변수가 다르게 작동해야한다고 생각합니다. 2에 전달 중이고 첫 번째와 두 번째 결과가 반환되고 세 번째 결과가 벗어날 것으로 예상됩니다. 실제로 반환되는 것은 첫 번째 결과이고 두 번째 결과는 하나의 문자열로 연결된 두 번째 결과입니다. 원하는 모든 것이 ThisISSomeTxtPartNumberTwo 인 경우 처음 2 번 이후에 결과를 수동으로 버려야합니다.

내가 알 수있는 한 반환 문자열에 공백을 넣지 않으려 고합니다. http://stackoverflow.com/questions/53849/how-do-i-tokenize : 여기를 참조하십시오

0: 'ThisISSomeTxt' 
1: 'PartNumberTwo' 
관련 문제