बिना डिलीमीटर सहित कई डिलीमीटरों के साथ स्ट्रिंग टोकेनाइज़र मुझे सी ++ में स्ट्रिंग पार्सर बनाने की आवश्यकता है। मैंबूस्ट
vector<string> Tokenize(const string& strInput, const string& strDelims)
{
vector<string> vS;
string strOne = strInput;
string delimiters = strDelims;
int startpos = 0;
int pos = strOne.find_first_of(delimiters, startpos);
while (string::npos != pos || string::npos != startpos)
{
if(strOne.substr(startpos, pos - startpos) != "")
vS.push_back(strOne.substr(startpos, pos - startpos));
// if delimiter is a new line (\n) then add new line
if(strOne.substr(pos, 1) == "\n")
vS.push_back("\\n");
// else if the delimiter is not a space
else if (strOne.substr(pos, 1) != " ")
vS.push_back(strOne.substr(pos, 1));
if(string::npos == strOne.find_first_not_of(delimiters, pos))
startpos = strOne.find_first_not_of(delimiters, pos);
else
startpos = pos + 1;
pos = strOne.find_first_of(delimiters, startpos);
}
return vS;
}
यह 2X + 7cos (3Y)
(tokenizer("2X+7cos(3Y)","+-/^() \t");
)
लिए काम करता है लेकिन 2X
मैं गैर बूस्ट समाधान की जरूरत के लिए एक रनटाइम त्रुटि देता है उपयोग करने की कोशिश।
मैं C++ String Toolkit (StrTk) Tokenizer
std::vector<std::string> results;
strtk::split(delimiter, source,
strtk::range_to_type_back_inserter(results),
strtk::tokenize_options::include_all_delimiters);
return results;
उपयोग करने की कोशिश लेकिन यह एक अलग स्ट्रिंग के रूप में टोकन नहीं देता है।
उदाहरण के लिए: अगर मैं 2x + 3y
उत्पादन वेक्टर के रूप में इनपुट देना होता है
2X +
3Y
मुमकिन है आप इस मामले में जहां '' lastPos' npos' है से 'स्थिति = str.find_first_of (सीमांकक, lastPos)' की रक्षा के लिए की जरूरत है। – ooga
यदि आप गैर-मानक लाइब्रेरी का उपयोग करके कोड दिखाने जा रहे हैं (जाहिर है [यह] (http://www.codeproject.com/Articles/23198/C-String-Toolkit-StrTk-Tokenizer), आपको इसका नाम देना चाहिए प्रश्न में, एक लिंक प्रदान करें, और अपने प्रश्न में एक संबंधित टैग जोड़ने पर विचार करें। –
मैं उस स्ट्रैट को जोड़ता हूं क्योंकि यह कहने के लिए कि समाधान मेरी समस्या को ठीक करने में सक्षम नहीं था। अब लिंक जोड़ें – user2473015