随机一条字符串,包含英文、数字、特殊符号,筛选出其中的数字部分并进行从小到大的排序
例:
输入:423dxqjkx81
输出:12348
思路:首先通过随机字符串的每个字符进行Ascall码进行分析,通过Ascall筛选出数字部分并将数字的字符转化为数字,保存到一个数组中,利用冒泡排序的子函数对该数组进行排序,输出结果。
程序如下:
#include <iostream> #include<vector> #include<cstdlib> #include<cstring> using namespace std; void sort(int nums[],int l) { int i, j, temp; for(i=0; i<l-1; i++){ //每一轮比较前 n-1-i 个,也就是说,已经排序好的最后 i 个不用比较 for(j=0; j<l-1-i; j++){ if(nums[j] > nums[j+1]){ temp = nums[j]; nums[j] = nums[j+1]; nums[j+1] = temp; } } } cout<<"输出结果:"<<endl; //输出排序后的数组 for(i=0; i<l; i++){ cout<<("%d ", nums[i]); } } int main() { string instr,temstr; int len=0; cout<<"输入一条字符串,数字,字母,特殊符号都要包括:"<<endl; getline(cin,instr); len=instr.length(); for(int i=0;i<len;i++) { char s=instr[i]; //cout<<(int)s<<endl; if((int)s>=48&&(int)s<=57) { temstr.append(instr,i,1); } } int l=temstr.length(); int num[l]; for(int i=0;i<l;i++) { num[i]=temstr[i]-48;//字符到数字的转化 } sort(num,l); }
部分Ascall码对照表
主函数里面对数字字符进行了筛选、提取、转换为数字(从对照表可以看到0-9数字与它们的Ascall码之间的差值都是48)、保存。sort子函数是一个冒泡排序,实现对保存的数字进行从小到大的排序。
程序运行结果: