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 "
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;