题目:
任意一串字符串 字符串里包含数字部分和一般的字符
例如 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;
}