zoukankan      html  css  js  c++  java
  • 百炼OJ 2974 *的标准化

    问题:将一连串的字符转化成用数字表示的数字串 ,如:

    3234567       -----   323-4567

    888-GINO      -----  888-1010

    3-10-10-10    -----  310-1010

    -8-2-3-5-7-2-9- --  823-5729

    该问题的关键点在于去 ‘-’ 和 将对应的字符映射到数字,见代码:

     1 /************************************************************************/
     2  *        Author: bakari  
     3  *        Date :2012/6/5
     4  *        StandardPhoneNum
     5 /************************************************************************/
     6 #include <iostream>
     7 #include <string.h>
     8 #include <algorithm>
     9 using std::cout;
    10 using std::cin;
    11 using std::endl;
    12 
    13 const int STRLEN = 9;
    14 const int MAXSTRLEN = 50;
    15 const int MAXROW = 10000;
    16 
    17 char map[] = "22233344455566677778889999";  //存储映射表
    18 char TranseStr[MAXROW][STRLEN];
    19 //char str[MAXSTRLEN];
    20 
    21 int cmp (const void * elem1, const void * elem2){  //快排比较函数
    22     return strcmp((char *)elem1, (char *)elem2); 
    23 
    24 }
    25 void StandardTranse(const char *str, int n){
    26 
    27     for(size_t i = 0, j = 0; j < STRLEN - 1; ){
    28         if(str[i] != '-'){
    29             if(str[i] <= 'Z' && str[i] >= 'A')
    30                 TranseStr[n][j] = map[str[i] - 'A'];
    31             if(str[i] <= '9' && str[i] >= '0')
    32                 TranseStr[n][j] = str[i];
    33             ++ i;
    34             ++ j;
    35         }
    36         else{
    37             ++ i;
    38         }
    39         if(3 == j){
    40             TranseStr[n][j++] = '-';
    41         }
    42     }
    43 }
    44 
    45 void FindSameNum(int n){
    46     int ix = 0;
    47     int jx;
    48     bool noduplicate = true;
    49     while(ix < n){
    50         jx = ix;
    51         ++ ix;
    52         while(ix < n && strcmp(TranseStr[ix],TranseStr[jx]) == 0)
    53             ++ix;
    54         if (ix - jx > 1){
    55             cout << TranseStr[jx] << " " << ix - jx <<endl;
    56             noduplicate = false;
    57         }
    58     }
    59     if (noduplicate)
    60         cout << "No duplicate." << endl;
    61 }
    62 
    63 int main()
    64 {
    65     int n;
    66     char str[MAXSTRLEN];
    67     cin >> n;
    68     for(int i = 0; i != n; ++i){
    69         cin >> str;
    70         StandardTranse(i);
    71     }
    72      cout << "输出" <<endl;
    73     for(int i = 0; i != n; ++i)
    74          cout << TranseStr[i] << endl;
    75     
    76     qsort(TranseStr,n,STRLEN,cmp);
    77     FindSameNum(n);
    78     return 0;
    79 }

    标准化函数StandardTranse()的另一个解法

     1 void StandardTranse(const char *str, int n){
     2     int j ,k;
     3     j = k = -1;
     4     while(k < STRLEN - 1){
     5         j ++;
     6         if(str[j] == '-')   //先做判断
     7             continue;
     8         k ++;
     9         if(3 == k)
    10             TranseStr[n][k ++] = '-';
    11         if(str[j] >= 'A' && str[j] <= 'Z'){
    12             TranseStr[n][k] = map[str[j] - 'A'];
    13             continue;
    14         }
    15         TranseStr[n][k] = str[j];
    16     }
    17     TranseStr[n][k] = '\0';
    18 }
    stay hungry stay foolish ----jobs 希望多多烧香!
  • 相关阅读:
    【DP】解析 SOSdp(子集和 dp)
    【图论】AcWing 342. 道路与航线 题目解答 (拓扑序+dijkstra)
    【DP】斜率优化初步
    Educational Codeforces Round 95 (Rated for Div. 2) 题解(待更)
    2020-2021 ACM-ICPC, Asia Seoul Regional Contest 部分题目解答
    Codeforces Round #704 (Div. 2) 题解(待更)
    Samara Farewell Contest 2020 (XXI Open Cup, GP of Samara) 部分题目解答
    AtCoder Regular Contest 113 题解(待补)
    docker中php-fpm无法更改时区问题
    pod时区更改
  • 原文地址:https://www.cnblogs.com/bakari/p/2631065.html
Copyright © 2011-2022 走看看