随机一条字符串,包含英文、数字、特殊符号,筛选出其中的数字部分并进行从小到大的排序

例:

输入: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子函数是一个冒泡排序,实现对保存的数字进行从小到大的排序。

程序运行结果:

 

posted @ 2020-04-22 21:32  victorywr  阅读(930)  评论(0编辑  收藏  举报