2010-06-30 13 views
16

के लिए स्प्लिट कार्यक्षमता vC++ में डिलीमीटर द्वारा CString ऑब्जेक्ट को कैसे विभाजित करें?एमएफसी सीस्ट्रिंग कक्षा

उदाहरण के लिए मैं एक string मूल्य

"एक + दो + तीन + चार"

एक CString varable में है।

उत्तर

28

इसी 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

हाय, Tokenize VC6 MFC में समर्थित नहीं है, लेकिन ATL – Dharma

+0

में समर्थित आप शायद इस सवाल का कि आवश्यकता जोड़ना चाहिए। – sje397

+4

[CStringT :: Tokenize()] के लिए दस्तावेज़ (http://msdn.microsoft.com/en-us/library/k4ftfkd2.aspx) कहते हैं कि फ़ंक्शन प्रमुख डिलीमीटरों को छोड़ देता है, इसलिए यदि आप वास्तव में एक स्ट्रिंग को विभाजित करना चाहते हैं और खाली सबस्ट्रिंग को अनदेखा नहीं करते हैं, तो मैं कहूंगा कि आप 'टोकनिज() 'का उपयोग नहीं कर सकते हैं। उदाहरण के लिए, "+ एक + दो + तीन + चार" 5 सबस्ट्रिंग के अपेक्षित परिणाम नहीं देगा। – herzbube

7

VC6 में, जहां cstring एक Tokenize विधि नहीं है, आप strtok समारोह और यह के दोस्तों के लिए स्थगित कर सकते हैं।

#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

क्रैपी ओओ और खराब एपीआई के साथ यह एक समस्या है - सभी जगहों पर काम करता है :) अच्छा लगता है। – sje397

+6

आप अपने खुद के प्रश्न का उत्तर दे सकते हैं। यह एफएक्यू में है। – sje397

+1

मैं अल्पविराम विभाजक को प्लस-साइन में बदल दूंगा, या उदाहरण काम नहीं करेगा। – TechNyquist

7
int i = 0; 
CStringArray saItems; 
for(CString sItem = sFrom.Tokenize(" ",i); i >= 0; sItem = sFrom.Tokenize(" ",i)) 
{ 
    saItems.Add(sItem); 
} 
संबंधित मुद्दे