c++代碼c++
class CStringParsing{ public: CStringParsing(const char* string_, int length){ _length = length; _string = string_; _position = 0; _isoverlow = false; } ~CStringParsing(){ } void Skip(int offset){ _position += offset; } float GetFloat(const char* split){ char buf[32]={0}; _position+=_substring(buf, 32,split); if(!IsOverlow()&&split) _position += strlen(split); return (float)atof(buf); } int GetInt(const char* split){ char buf[32]={0}; _position+=_substring(buf, 32,split); if(!IsOverlow()&&split) _position += strlen(split); return atoi(buf); } const char* GetString(char* buf, int lenght,const char* split){ _position+=_substring(buf, lenght,split); if(!IsOverlow()&&split) _position += strlen(split); return buf; } bool IsOverlow(){return _isoverlow;} private: int _min(int x,int y){ if(x<y) return x; else return y; } int _substring(char *buf_, int len_, const char* split_){ if(_position>=_length){ _isoverlow = true;; return 0; } if(split_==NULL){ int p=_min(len_-1,_length-_position); memcpy(buf_, _string+_position, p); buf_[p]=0; return p; } const char* pp = strstr(_string+_position, split_); if(pp==NULL){ int p=_min(len_-1,_length-_position); memcpy(buf_, _string+_position, p); buf_[p]=0; return p; } int p=_min(len_-1,pp-(_string+_position)); memcpy(buf_, _string+_position, p); buf_[p]=0; return p; } private: int _length; const char* _string; int _position; bool _isoverlow; };
調用例子: "d:/dir/app data/test.ui 320x568 0 1 "app
char szDebugUI[256]; CStringParsing parsing(lpCmdLine, strlen(lpCmdLine)); parsing.GetString(szDebugUI, 256, ".ui"); strcat(szDebugUI,".ui"); parsing.Skip(1);//blank space. int w = parsing.GetInt("x"); int h = parsing.GetInt(" "); int island = parsing.GetInt(" "); int iscaption = parsing.GetInt(NULL); if(parsing.IsOverlow()) return 0;