請不要直接抄寫程式碼! 也請不要直接跳到程式碼部分,除非你已經寫好了,想要參考別人的寫法!
回家功課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;
}
如果有任何問題,歡迎私訊跟我討論喔!