2010-06-30 30 views

Trả lời

28

Tương tự như this question:

CString str = _T("one+two+three+four"); 

int nTokenPos = 0; 
CString strToken = str.Tokenize(_T("+"), nTokenPos); 

while (!strToken.IsEmpty()) 
{ 
    // do something with strToken 
    // .... 
    strToken = str.Tokenize(_T("+"), nTokenPos); 
} 
+0

Xin chào, Mã hóa không được hỗ trợ trong VC6 MFC, nhưng được hỗ trợ trong ATL – Dharma

+0

Có lẽ bạn nên thêm yêu cầu đó vào câu hỏi. – sje397

+4

[Các tài liệu cho CStringT :: Tokenize()] (http://msdn.microsoft.com/en-us/library/k4ftfkd2.aspx) nói rằng hàm bỏ qua các dấu tách hàng đầu, vì vậy nếu bạn thực sự muốn tách một chuỗi và không bỏ qua các phần tử rỗng, sau đó tôi sẽ nói rằng bạn không thể sử dụng 'Tokenize()'. Ví dụ, "+ một + hai + ba + bốn" sẽ không mang lại kết quả mong đợi của 5 chất nền. – herzbube

7

Trong VC6, nơi CString không có một phương pháp tokenize, bạn có thể hoãn đến strtok chức năng và những người bạn của nó.

#include <tchar.h> 

// ... 

CString cstr = _T("one+two+three+four"); 
TCHAR * str = (LPCTSTR)cstr; 
TCHAR * pch = _tcstok (str,_T("+")); 
while (pch != NULL) 
{ 
    // do something with token in pch 
    // 
    pch = _tcstok (NULL, _T("+")); 
} 

// ... 
18
CString sInput="one+two+three"; 
CString sToken=_T(""); 
int i = 0; // substring index to extract 
while (AfxExtractSubString(sToken, sInput, i,'+')) 
{ 
    //.. 
    //work with sToken 
    //.. 
    i++; 
} 

AfxExtractSubString on MSDN.

+2

Đó là một vấn đề với OO crappy và các API nghèo - chức năng khắp nơi :) Tìm tốt. – sje397

+6

Bạn có thể trả lời câu hỏi của riêng bạn. Đó là trong Câu hỏi thường gặp. – sje397

+1

Tôi sẽ thay đổi dấu phẩy thành dấu cộng hoặc ví dụ sẽ không hoạt động. – TechNyquist

7
int i = 0; 
CStringArray saItems; 
for(CString sItem = sFrom.Tokenize(" ",i); i >= 0; sItem = sFrom.Tokenize(" ",i)) 
{ 
    saItems.Add(sItem); 
} 
Các vấn đề liên quan