简单实用读取字符串信息的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 "

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;

猜你喜欢

转载自my.oschina.net/u/1030910/blog/747500