電話號碼轉換與統計(POJ-1002)
submit上去是Runtime Error,還需要解決。但是我自己電腦上執行好幾個測試用例是正確的。
/**
* http://poj.org/problem?id=1002
*/
#include <iostream>
using namespace std;
/**
* 字元到數字的轉換
*/
int valueToKey(char ch){
if(ch >= '0' && ch <= '9') return ch;
if(ch < 'A' || ch > 'Z') return -1;
if(ch == 'Q' || ch == 'Z') return -1;
if(ch <= 'C') return '2';
else if(ch <= 'F') return '3';
else if(ch <= 'I') return '4';
else if(ch <= 'L') return '5';
else if(ch <= 'O') return '6';
else if(ch <= 'S') return '7';
else if(ch <= 'V') return '8';
else return '9';
}
/*void printAllStr(char **strs, int n){
cout<<"ALL String:"<<endl;
for(int i=0;i<n;i++){
cout<<*(strs+i)<<endl;
}
}*/
//列印出正確格式的字串
void printString(char *str){
char *p = str;
int i=0;
while(*p != '\0'){
if(i == 3) cout<<"-";
cout<<*p;
i++;
p++;
}
}
int main(){
int n=0;
char ch;
int index;
int i,j;
char **strs;
char tmp[20]; //用來臨時存放輸入字串的陣列
cin >> n;
strs = (char **)malloc(sizeof(char *)*n);
//逐個輸入所有字串
for(i=0;i<n;i++){
cin >> tmp;
*(strs+i) = (char *)malloc(sizeof(strlen(tmp)+1)); //為結束符多申請一個空間
memcpy(*(strs+i),tmp, strlen(tmp) + 1); //把結束符'\0'也一起拷貝過去
}
//順序掃描,將所有輸入字串標準化(轉換成數字)
for(i=0;i<n;i++){
//處理第i個字串
index = 0;
for(j=0;j<=strlen(*(strs+i));j++){
ch = *(*(strs+i)+j);
//遇到分隔符'-'
if(ch == '-') continue;
//遇到結束符'\0'
if(ch == '\0'){
*(*(strs+i)+index) = ch;
break;
}
//正常字元轉換
if((ch = valueToKey(ch)) != -1){
*(*(strs+i)+index) = ch;
index++;
}
else{
cout<<"invalid character"<<endl;
return 0;
}
}
cout<<endl;
}
//選擇排序(也可以使用O(nlogn)的快速排序,歸併排序等)
for(i=0;i<n;i++){
//從i-n中選取最小的
int min = i;
for(j=i;j<n;j++){
if(strcmp(*(strs+j), *(strs+min)) < 0){
min = j;
}
}
//看是否要與位置i的指標交換
if(min != i){
char *tmp = *(strs+min);
*(strs+min) = *(strs+i);
*(strs+i) = tmp;
}
}
//統計個數並輸出
char *current = *strs;
int count = 0;
for(i=0;i<n;i++){
if(strlen(*(strs+i)) != 7) continue; //不考慮長度不是7的字串
if(strcmp(*(strs+i), current) == 0){ //累加計數值
count++;
}
else{ //輸出
if(count > 1){
printString(current);
cout<<" "<<count<<endl;
}
count = 1;
current = *(strs+i);
if(i == n-1) break;
}
}
if(count > 1){ //輸出最後一個
printString(current);
cout<<" "<<count<<endl;
}
//printAllStr(strs, n);
return 0;
}
相關文章
- Java中將電話號碼轉換為數字Java
- Excel統計某電話號碼有多少人打過Excel
- 電話號格式
- 手機號碼和電話號碼合法性驗證程式碼
- Android程式設計獲取手機型號,本機電話號碼,sdk版本及firmware版本號(即系統版本號)Android程式設計
- STM32 上位機 測試藍芽電話功能功能(包括撥打電話/結束通話電話/接聽電話/Audio Transfer/獲取通話電話號碼/獲取本地電話號碼/啟用語音識別/獲取本地號碼/獲取運營商名字/3GPP指令)藍芽
- SAP系統中的內碼和外碼轉換 (WBS號)
- 17_電話號碼的字母組合
- 將EXCEL裡的電話號碼用逗號分隔匯出Excel
- Android獲取聯絡人和電話號碼Android
- 【力扣】電話號碼的組合(回溯法)力扣
- 我們是如何設計儲存4億個電話號碼的
- 程式設計之美之電話號碼對應英語單詞程式設計
- 行列轉換,列行轉換統計
- 電話本系統python程式碼Python
- Java正規表示式——驗證手機號和電話號碼Java
- 基於php的校園通訊錄電話號碼查詢系統PHP
- 在IOS系統中電話號碼自動變藍色解決方案iOS
- 林內熱水器售後服務電話全國統一(林內客服熱線號碼)
- 教你excel篩選手機號碼公式和excel篩選正常電話號碼Excel公式
- 軟體測試--詳細判斷電話號碼
- 演算法電話號碼對應英文單詞演算法
- Java實現的簡單電話號碼儲存Java
- 17. 電話號碼的字母組合-c++C++
- 艾飛斯特智慧鎖400客服電話/全國維修總部電話(2024更新號碼)
- OpenHarmony原始碼解析之電話子系統——通話流程原始碼
- 直播平臺開發,電話號碼正規表示式
- 電話區號去前面的0、varchar2轉換成number並比較(to_number注意事項)
- 教你excel表格如何快速提取名字和電話號碼Excel
- 電話號碼刪除了怎麼恢復?通訊錄刪除的號碼怎麼找回
- 從技術角度深入剖析:改號軟體,電話號碼任意顯示,偽造來電顯示
- ascii碼與字元的相互轉換ASCII字元
- leetcode日記17. 電話號碼的字母組合LeetCode
- (方法)怎麼快速把電話號碼批量匯入通訊錄
- 轉換手機號玩玩~~~
- 編碼轉換統一防止亂碼
- HTML5實現DTMF(電話撥號按鍵訊號)解碼、編碼,程式碼簡單易於移植HTML
- 電信詐騙黑灰產業鏈現狀(二):境外號碼替代境內號碼,成詐騙電話、詐騙簡訊傳播主力產業