/* **************************************************** * Class: StringTokenizer * * By Arash Partow - 2002 * * Copyright Arash Partow 2002-2003 * * All Right Reserved * **************************************************** */ #include "StringTokenizer.h" StringTokenizer::StringTokenizer() { tokenStr = ""; delim = ""; }; StringTokenizer::StringTokenizer(string str, string delim) { tokenStr = str; this->delim = delim; /* Remove sequential delimiter */ unsigned int currentPos = 0; while(1==1) { if ((currentPos = tokenStr.find(delim,currentPos)) != string::npos) { currentPos +=delim.length(); while(tokenStr.find(delim,currentPos) == currentPos) { tokenStr.erase(currentPos,delim.length()); } } else break; } /* Trim leading delimiter */ if (tokenStr.find(delim,0) == 0) { tokenStr.erase(0,delim.length()); } /* Trim ending delimiter */ if (tokenStr.rfind(delim) == (tokenStr.length()-delim.length())) { tokenStr.erase(tokenStr.length()-delim.length(),delim.length()); } }; StringTokenizer::~StringTokenizer() { tokenStr = ""; delim = ""; }; int StringTokenizer::countTokens() { unsigned int prevPos = 0; int numTokens = 0; if (tokenStr.length() > 0) { numTokens = 0; unsigned int currentPos = 0; while(1==1) { if ((currentPos = tokenStr.find(delim,currentPos)) != string::npos) { numTokens++; prevPos = currentPos; currentPos += delim.length(); } else break; } return ++numTokens; } else { return 0; } }; bool StringTokenizer::hasMoreTokens() { return (tokenStr.length() > 0); }; string StringTokenizer::nextToken() { if (tokenStr.length() == 0) return ""; string tStr =""; unsigned int pos = tokenStr.find(delim,0); if (pos != string::npos) { tStr = tokenStr.substr(0,pos); tokenStr = tokenStr.substr(pos+delim.length(),tokenStr.length()-pos); } else { tStr = tokenStr.substr(0,tokenStr.length()); tokenStr = ""; } return tStr; }; int StringTokenizer::nextIntToken() { return atoi(nextToken().c_str()); }; double StringTokenizer::nextFloatToken() { return atof(nextToken().c_str()); }; string StringTokenizer::nextToken(string delimiter) { if (tokenStr.length() == 0) return ""; string tStr =""; unsigned int pos = tokenStr.find(delimiter,0); if (pos != string::npos) { tStr = tokenStr.substr(0,pos); tokenStr = tokenStr.substr(pos+delimiter.length(),tokenStr.length()-pos); } else { tStr = tokenStr.substr(0,tokenStr.length()); tokenStr = ""; } return tStr; }; string StringTokenizer::remainingString() { return tokenStr; }; string StringTokenizer::filterNextToken(string filterStr) { string str = nextToken(); unsigned int currentPos = 0; while((currentPos = str.find(filterStr,currentPos)) != string::npos) { str.erase(currentPos,filterStr.length()); } return str; };