华为编程大赛_将字符数组内的数字排序

转自:http://www.cnblogs.com/justinzhang/archive/2012/04/22/2465061.html

/*
 Author:JustinZhang
 Email:uestczhangchao@gmail.com
 Time:2012年4月22日16:08:42
 From:2012华为编程大赛下午组第二题
 */
 
 #include <iostream>
 #include <cstring>
 #include <iomanip>
 using namespace std;
 
 /*
 input[]是一个字符串,其中有数字、字母、特殊符号,要求把当中的数字递增排序;将结果存放在output[]中。
 如:ux0@9ab7yu2输出为:ux0@2ab7yu7
 思路:将input中把所有出现数字的位置记录下来,并且将所有出现的数字放到另外一个数组中进行排序,然后将排好序的
 数组,根据记录的有数字的位置,一个一个的插入到output中。
 
 */
 
 
 void mysort(char input[], char output[])
 {
     int m = strlen(input);
     int *location = new int [m];
     int *digital = new int [m];
     int digital_count = 0;
     int tmp = 0;
     //记录出现数字的位置,并且将数字集中到digital[]数组中
     for(int i=0; i<m; i++)
     {
         if(input[i]>='0' && input[i]<='9')
         {
             location[digital_count] = i;
             digital[digital_count] = input[i] - '0';
             digital_count++;
         }
         output[i] = input[i];
     }
     //使用冒泡排序
     for(int i=1; i<digital_count; i++)
     {
         for(int j=i; j>0; j--)
         {
             if(digital[j] < digital[j-1])
             {
                 tmp = digital[j];
                 digital[j] = digital[j-1];
                 digital[j-1] = tmp;
             }
         }
     }
     //将排好序的数组插入到output当中
     for(int i=0; i<digital_count; i++)
     {
         output[location[i]] = digital[i] + '0';
     }
     output[m] = '\0';//手工加上字符数组结束标志,因为字符数组不会自动在末尾加上结束符;
     delete [] location;
     delete [] digital;
 }
 
 
 int main()
 {
     int index = 0;
     char input[] = "u8x9@0ab7yu2";
     char *output = new char[strlen(input)+1];
     mysort(input,output);
     while(output[index] != '\0')
     {
         cout << output[index++];
     }
     cout << endl;
     delete [] output;
     return 0;
 }



原文地址:https://www.cnblogs.com/youngforever/p/3104674.html