請不要直接抄寫程式碼! 也請不要直接跳到程式碼部分,除非你已經寫好了,想要參考別人的寫法!
回家功課16
- 以
^Z
結束輸出 (測資可能有很多行),不是^Z
的話就把輸入進來的字串temp
加進sentence
裡 - 最後要處理的字串為
sentence
,temp
只是暫時拿來輸入的變數 (temporary
) - 宣告長度為
26
的陣列,並初始化為0
(因為不分大小寫的字母有26
個) - 第
0
個代表A
或a
、第1
個代表B
或b
. . . 以此類推 - 用
for
迴圈遍歷sentence
的每一個字元,分成大寫、小寫和其他 - 用
ASCII
判斷,如果是大寫就
alphabet[sentence[i]-'A']++;
- 舉例:當
sentence[10]
為F
(ACSII:70
) 剪掉A
(ASCII:65
) 會等於5
,則alphabet[5]
會+1
- 小寫以此類推
- 其他符號或空格則不考慮,跳過 (
continue
) - 判斷最大值與記錄位置,就把
alphabet
這陣列遍歷過就行了
程式碼大概如下:
#include <iostream>
using namespace std;
int main()
{
string sentence;
string temp;
while (getline(cin,temp)) {
if (temp == "^Z" || temp == "^z")
break;
sentence += " " + temp;
}
int length = sentence.size();
int alphabet[26] = {0};
for (int i=0;i<length;i++) {
if (sentence[i] >= 'A' && sentence[i] <= 'Z')
alphabet[sentence[i]-'A']++;
else if (sentence[i] >= 'a' && sentence[i] <= 'z')
alphabet[sentence[i]-'a']++;
else
continue;
}
int maximum = -1;
int locate = -1;
for (int i=1;i<26;i++) {
if (alphabet[i]>maximum) {
maximum = alphabet[i];
locate = i;
}
}
cout<<char(locate+'A')<<" "<<maximum<<endl;
}
如果有任何問題,歡迎私訊跟我討論喔!