#include <iostream>// 数据流输入/输出
#include<string>// 字符串类
#include<algorithm>// STL 通用算法
#include<vector>// STL 动态数组容器
#include<stdlib.h>#include<stdio.h>
#include<string.h>#include<ctype.h>
#define TOKEN '-'usingnamespace std;
bool strsize(conststring& i,const string& j);
char* Extraction_sequence(constchar* src,char* des);
int main(){char output[100];
Extraction_sequence("ad2e99f35a0dx1we5465d修正465465w000e76", output);
printf("%s\n", output);return 0;}
bool strsize(conststring& i,const string& j)
{if (i.size()== j.size()) {return (i < j); }
return (i.size()< j.size());}
char* Extraction_sequence(constchar* src,char* des){char* ret= des; // 返回指针
char* buf= newchar[strlen(src)+ 1];// 缓冲buf
char* c_buf= buf; // 提取字符串中的数字
while (*src) {if (isdigit(*src)) {*c_buf++= *src;if (!isdigit(*(src+ 1)))// 数字后面添加 分割标记
*c_buf++= TOKEN ; } src++; }*(c_buf - 1)= '\0';// 封闭字符串/* 排序数字序列*/
vector<string> seq;
vector<string>::iterator iter;char* pch; pch= strtok(buf,"-");
while (pch != NULL)
{
seq.push_back(pch);//2 35 1 76 置入到容器里
pch= strtok(NULL,"-");
}
sort(seq.begin(), seq.end(), strsize);//按数字长度和大小排列
iter= seq.begin(); des[0]= '\0';// des 清零
while (iter!= seq.end()) { strcat(des, (iter++)->c_str()) ;
strcat(des, "-") ; }
des[strlen(des)- 1]= '\0';// des 消除最后的 标记'-'
delete[] buf;return ret;}