解析字符串中的数字,并将其排序后输出字符串

题目:

任意一串字符串 字符串里包含数字部分和一般的字符

例如 ad2ef35adx1wewe76
注意这个字符串 里面有4个数字 分别是 1 2 35 76  不考虑大数

将数字按照从小到大排序 组成一个新的字符串

要求制作一个函数来进行处理

假设是   fun(char*src,char*des)
         {
         }

src 输入字符串 ad2ef35adx1wewe76
des 输出字符串 1-2-35-76

 

至少感觉在效率上还是比较高的

 

void fun(char* src, char* des)
{
	vector<int> vec_num;//保存解析出来的数字

	char* preSrc = src;//保存第一个的数字字符
	char* nexSrc = src;

	int n = 0;
	bool Find = false;//标志,用于判断是否已经找到有数字的字符

	//第一个字符是数字的情况
	if (*nexSrc >= '0' && *nexSrc <= '9')
	{
		Find = true;
	}

	while (*nexSrc != '\0')
	{
		nexSrc++;

		//找到第一个数字的
		if (*nexSrc >= '0' && *nexSrc <= '9' && !Find)
		{
			preSrc = nexSrc;
			Find  = true;
		}
		else//数字已经结束的地方
			if (*nexSrc < '0' || *nexSrc > '9' && Find)
			{
				//将数字解析出
				char c[10] = {0};
				memcpy(c, preSrc, nexSrc - preSrc);
				n = atoi(c);
				
				//保存到vector中,同时排序
				vector<int>::iterator iter = vec_num.begin();
				for (iter; iter != vec_num.end(); iter++)
				{
					if (n < *iter)
					{
						iter = vec_num.insert(iter, n);
						break;
					}
				}

				if (iter == vec_num.end() )
				{
					vec_num.push_back(n);
				}

				Find = false;
			}
	}

	//最后将vector中的数字存到des中
	for (int i=0; i<vec_num.size(); i++)
	{
		itoa(vec_num[i], des, 10);
		des += strlen(des);
		*des++ = '-';
	}

	*(des-1) = 0;
}


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值