快轉到主要內容

UVA10921

序章
#

被老師點名我們這組要上臺講解題目,這題題號是 UVA10921,很簡單的一題,水熊蟲都會寫的程度

我打算直接拿這個 Blog 頁面上去講,蠻奇怪的講解方式,順便水一篇文章上來。

順帶一提我們的組名是《Haiyaaa》這奇怪的名子是我取的,因為那個時候我看了一堆 Uncle Roger 所以就拿他的口頭禪當組名,如果有機會改名我倒是想改成 Ciallo~(∠・ω< )⌒☆ 」 》

題目說明:
#

這題要將輸入字串中的英文字母轉換成對應的數字:

Letters Number
ABC 2
DEF 3
GHI 4
JKL 5
MNO 6
PQRS 7
TUV 8
WXYZ 9

輸入字串包含大寫字母、01-

01- 不需要轉換,直接輸出即可。

比如說輸入是:0101-CIALLO-0101-CIALLO

要輸出:0101-242556-0101-242556 12 3

結尾的 123 代表:

  • 有 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;
	}
}

相關文章