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

来源:互联网 发布:淘宝网广场舞裙子 编辑:程序博客网 时间:2024/06/08 23:46

转自: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; }


原创粉丝点击