C++ 实现比较版本号

code:
int iRetVersion = ComparerVersion("6.6.1512.401","6.6.1512.409");
//retval: 0:相等;1: 大于此版本,-1:小于当前版本 3:其他情况;
int ComparerVersion(char * version_get ,char * version)
{
	string strversion_get = version_get;
	string strversion = version;
	if (strversion_get.empty() || strversion.empty())
	{
		return 3;
	}
	
	

	
	size_t pos = 0;
	int number = 0;
	string pattern(".");
	int icpt = pattern.size();
	std::vector<string> result;
	int iposbf = 0;
	while(pos != string::npos)
    {
        pos = strversion_get.find(pattern, pos);
        if(pos != string::npos)
        {
			int istart = iposbf;
			if (0 ==istart)
			{
			}
			else
			{
				istart = istart + icpt;
			}

			std::string s = strversion_get.substr(istart,pos - istart);
			result.push_back(s);
            ++number;
			iposbf = pos;
            pos += (pattern.size() + 1);
			
        }
		else
		{   
			iposbf += (pattern.size()); 
			std::string s = strversion_get.substr(iposbf,strversion_get.size());
			result.push_back(s);
		}
    }
	
	if (number != 3)
	{
		return 3;
	}

	//
	size_t pos_v = 0;
	int number_v = 0;
	string pattern_v(".");
	int icpt_v = pattern_v.size();
	std::vector<string> result_v;
	int iposbf_v = 0;
	while(pos_v != string::npos)
    {
        pos_v = strversion.find(pattern_v, pos_v);
        if(pos_v != string::npos)
        {
			int istart_v = iposbf_v;
			if (0 ==istart_v)
			{
			}
			else
			{
				istart_v = istart_v + icpt_v;
			}

			std::string s_v = strversion.substr(istart_v,pos_v - istart_v);
			result_v.push_back(s_v);
            ++number_v;
			iposbf_v = pos_v;
            pos_v += (pattern_v.size() + 1);
        }
		else
		{
			iposbf_v += (pattern_v.size());
			std::string s_v = strversion.substr(iposbf_v,strversion.size());
			result_v.push_back(s_v);
		}
    }
	if (number_v != 3)
	{
		return 3;
	}

	//
	ostringstream oversion;
	for(int i=0; i < result.size(); i++)
	{
		oversion<<result[i].c_str();//打印容器的内容
		OutputDebugStringA(const_cast<char*>(result[i].c_str()));
		OutputDebugStringA("\r\n");
		OutputDebugStringA(const_cast<char*>(oversion.str().c_str()));
		OutputDebugStringA("\r\n");
	}

	ostringstream oversionv;
	for(int j=0; j < result_v.size(); j++)
	{
		oversionv<<result_v[j].c_str();//打印容器的内容
		OutputDebugStringA(const_cast<char*>(result_v[j].c_str()));
		OutputDebugStringA("\r\n");
		OutputDebugStringA(const_cast<char*>(oversionv.str().c_str()));
		OutputDebugStringA("\r\n");
	}

	for(int m=0; m < result.size(); m++)
	{
		oversion<<result[m].c_str();//打印容器的内容
		OutputDebugStringA(const_cast<char*>(result[m].c_str()));
		OutputDebugStringA("\r\n");
		OutputDebugStringA(const_cast<char*>(oversion.str().c_str()));
		OutputDebugStringA("\r\n");
		
		int istrcmp = 0;
		istrcmp = result[m].compare(result_v[m]);
		if ( istrcmp == 0)
		{
			if (m == result.size() -1)
			{
				return 0;
			}
		}
	    else if( istrcmp == 1)
		{
			return 1;
		}
		else if (istrcmp < 0)
		{
			return -1;
		}
	}
    
		

	return 0;
}

code:


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值