从字符串中提取数字,然后按长度和字典序排列
2011-09-11 10:58
197 查看
任意一串字符串 字符串里包含数字部分和一般的字符 例如 ad2ef35adx1wewe76 注意这个字符串 里面有4个数字 分别是 1 2 35 76 不考虑大数 将数字按照从小到大排序 组成一个新的字符串 要求制作一个函数来进行处理 假设是 fun(char*src,char*des) { } src 输入字符串 ad2ef35adx1wewe76 des 输出字符串 1-2-35-76
第一步,建立一个缓冲,删除所有的字母 留下 2-35-1-76 这个应该没什么难度的. 再一步 使用 strtok , 如果可以使用容器就比较简单,往容器里塞,然后容器排序 ,如果不能使用容器,都要自己造轮子,哪就麻烦一点了
#include <iostream> // 数据流输入/输出#include <string> // 字符串类#include <algorithm> // STL 通用算法#include <vector> // STL 动态数组容器#include <stdlib.h>#include <stdio.h>#include <string.h>#include <ctype.h>#define TOKEN '-'using namespace std;bool strsize(const string& i, const string& j);char* Extraction_sequence(const char* src, char* des);int main(){char output[100];Extraction_sequence("ad2e99f35a0dx1we5465d修正465465w000e76", output);printf("%s\n", output);return 0;}bool strsize(const string& i, const string& j) // 排序谓语函数{if (i.size() == j.size()) // 如果长度相同,就按字典序return (i < j);return (i.size() < j.size()); // 默认按长度排}char* Extraction_sequence(const char* src, char* des){char* ret = des; // 返回指针char* buf = new char[strlen(src) + 1]; // 缓冲bufchar* 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;}
相关文章推荐
- 华为机试第二题,输入一字符串,提取数字并降序排列
- 计算指针指向的字符串的长度并提取计算字符串中数字的大小
- 从文件读字符串,提取其中的数字,然后进行集合划分
- c语言初学--计算字符串中数字的最大长度并提取 以及输入两个子串 提取分别以这为开头和结尾的字符串
- 在控制台上输入一个字符串,将其中夹杂的字母去除,只剩数字,然后对对这些数字进行全排列,输出全排列结果
- 在控制台上输入一个字符串,将其中夹杂的字母去除,只剩数字,然后对对这些数字进行全排列,输出全排列结果
- 给定固定长度的字符串,求解按字符字典序排列,该字符串是第几小?
- 输入一个不定长度的数字字符串,将其中的数字提取出来并保存在数组中。
- HW输入字符串长度,字符串,计数m。从前往后计数,当数到m个元素时,m个元素出列,同时将该元素赋值给m,然后从下一个数计数循环,直到所有数字都出列,给定的数全部为大于0的数字。输出出队队列。
- USTC机试—从键盘输入 N,建立 N*N矩阵,每个元素是一个字符串,为每个元素赋值。然后求 出按字典序排列最大的元素所在的行列。
- Js 字符串中提取数字
- iOS 算法~写一个函数,返回数字1-N排列组成的字符串,数字之间通过空格分离.例如1-5.返回”1 2 3 4 5”
- 提取字符串中的数字
- java从字符串中提取数字
- 给定一个int型数字,组合成规定长度的字符串,不够用0补齐
- 找出字符串中最长的数字子串并指出位置长度,输出。
- 求中英文混合字符串长度,中英文混合字符串截取(汉字2个字节,字母数字等1个字节),字符转ASCII码,ASCII码转字符
- hive函数regexp_extract提取固定长度的数字信息(正则表达)
- java从字符串中提取非数字
- Excel中 提取字符串中的字符或数字