程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> poj1002-487-3279(字符串處理),poj1002

poj1002-487-3279(字符串處理),poj1002

編輯:C++入門知識

poj1002-487-3279(字符串處理),poj1002


一,題意:
  中文題,不解釋!
二,思路:
  1,處理輸入的電話號碼
  2,排序num[]數組
  3,輸出
三,步驟:
  1,消除 -、Q、Z 三種字符,將一個電話號碼轉化為一個整數存如num[]數組
    如:num[0]=4873279;
  2,快排函數:sort(num.num+t)  頭文件:#include<algorithm>
  3,輸出前面3位,後面4位,已經出現的次數(記住使用輸出格式設置符的時候加頭文件:iomanip)
    i,設置3位的寬度set(3)、除以10000之後不足3位的補0(setfill('0'))、
      cout << setfill('0') << setw(3) << num[i] / 10000;
      cout << '-';
    ii,設置4位的寬度set(4)、對10000取余之後不足4位的補0(setfill('0'))、
      cout << setfill('0') << setw(4) << num[i] % 10000;
      cout << ' ' << count << endl;
四,注意:
  1,所有電話號碼中,一個重復的都沒有才輸出"No duplicates.",而且只出現一次的不輸出。
  2,測試用例中會出現Q和Z,這兩個字母要處理
  3,字符數組要開大些,,小了結果不正確
  4,注意電話號碼開頭是0的,也照樣輸出0

1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 #include<iomanip> //I/O流控制頭文件 5 using namespace std; 6 7 int ctoi(char ch) //把字符ch轉換為其在手機上對應的數字鍵 8 { 9 if (ch == 'A' || ch == 'B' || ch == 'C') 10 return 2; 11 if (ch == 'D' || ch == 'E' || ch == 'F') 12 return 3; 13 if (ch == 'G' || ch == 'H' || ch == 'I') 14 return 4; 15 if (ch == 'J' || ch == 'K' || ch == 'L') 16 return 5; 17 if (ch == 'M' || ch == 'N' || ch == 'O') 18 return 6; 19 if (ch == 'P' || ch == 'R' || ch == 'S') 20 return 7; 21 if (ch == 'T' || ch == 'U' || ch == 'V') 22 return 8; 23 if (ch == 'W' || ch == 'X' || ch == 'Y') 24 return 9; 25 } 26 27 //注意:定義長度比較大的數組,最好定義在主函數外(即堆內存中) 28 char ch[10000000]; //存儲一行未處理的電話號碼 29 int num[10000000]; //存儲多行已處理的電話號碼(如:num[0]=4873279) 30 31 int main() { 32 int t; 33 while (cin >> t) { 34 for (int i = 0; i < t; i++) { 35 cin >> ch; 36 for (int j = 0, k = 0; j < strlen(ch); j++) { 37 if (ch[j] == '-' || ch[j] == 'Q' || ch[j] == 'Z') 38 continue; 39 else if (ch[j] <= '9') 40 num[i] = num[i] * 10 + ch[j] - '0'; 41 else if (ch[j] <= 'Z') 42 num[i] = num[i] * 10 + ctoi(ch[j]); 43 } 44 } 45 46 sort(num, num + t); //快排函數sort頭文件 47 bool flag = false; 48 int count = 1; 49 for (int i = 0; i < t; i++) { 50 if (num[i] == num[i + 1]) { 51 count++; 52 flag = true; 53 } 54 else { 55 if (count > 1) { 56 cout << setfill('0') << setw(3) << num[i] / 10000; 57 cout << '-'; 58 cout << setfill('0') << setw(4) << num[i] % 10000; 59 cout << ' ' << count << endl; 60 } 61 count = 1; 62 } 63 } 64 65 if (!flag) { 66 cout << "No duplicates." << endl; 67 } 68 } 69 return 0; 70 } View Code

 

版權聲明:本文為博主原創文章,未經博主允許不得轉載。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved