請不要直接抄寫程式碼! 也請不要直接跳到程式碼部分,除非你已經寫好了,想要參考別人的寫法!

回家功課16

  • ^Z 結束輸出 (測資可能有很多行),不是 ^Z 的話就把輸入進來的字串 temp 加進 sentence
  • 最後要處理的字串為 sentencetemp 只是暫時拿來輸入的變數 (temporary
  • 宣告長度為 26 的陣列,並初始化為 0 (因為不分大小寫的字母有 26 個)
  • 0 個代表 Aa 、第 1 個代表 Bb . . . 以此類推
  • 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;  
}

如果有任何問題,歡迎私訊跟我討論喔!