序章 #
被老師點名我們這組要上臺講解題目,這題題號是 UVA10921,很簡單的一題,水熊蟲都會寫的程度
我打算直接拿這個 Blog 頁面上去講,蠻奇怪的講解方式,順便水一篇文章上來。
順帶一提我們的組名是《Haiyaaa》這奇怪的名子是我取的,因為那個時候我看了一堆 Uncle Roger 所以就拿他的口頭禪當組名,如果有機會改名我倒是想改成《 Ciallo~(∠・ω< )⌒☆ 」 》
題目說明: #
這題要將輸入字串中的英文字母轉換成對應的數字:
| Letters | Number |
|---|---|
| ABC | 2 |
| DEF | 3 |
| GHI | 4 |
| JKL | 5 |
| MNO | 6 |
| PQRS | 7 |
| TUV | 8 |
| WXYZ | 9 |
輸入字串包含大寫字母、0 、1、-
而 0、1 與 - 不需要轉換,直接輸出即可。
比如說輸入是:0101-CIALLO-0101-CIALLO
要輸出:0101-242556-0101-242556 12 3
結尾的 12 和 3 代表:
- 有 12 個大寫字母
- 有 3 個
-字元
程式: #
這題其實直接用 if-else 寫就行,但有更漂亮的寫法
我們建立一個字串:
string ciallo = "22233344455566677778889999";
這個字串代表:
A -> 2
B -> 2
C -> 2
D -> 3
...
Z -> 9
因為:
'A' - 'A' = 0
'B' - 'A' = 1
...
'Z' - 'A' = 25
所以:
ciallo[c - 'A']
就能快速取得對應的數字。
完整程式碼 #
#include<string>
#include<iostream>
#include<string>
using namespace std;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
string str;
string ciallo = "22233344455566677778889999";
while(getline(cin,str)){
int cntA=0,cntB=0;
for(char cc : str){
if(cc >='A' && cc <='Z'){
cout<<ciallo[cc-'A'];
++cntA;
}
else if(cc == '-'){
++cntB;
cout<<cc;
}
else
cout<<cc;
}
cout<<" "<<cntA<<" "<<cntB<<endl;
}
}