**如果看不懂可以在底下留言發問**
**試著看懂別人的程式碼也是一種學習^ ^**
[C_ST21-易] 文字及字母出現次數
問題描述 :
在電腦科學上 ,計算一串文字上各個字母出現的頻率是常被用到的技術,這對壓縮來講是很重要的資訊,而計算字數也可以幫助人們作校正的工具。一行文字被空白、逗點或是句點所分隔而形成很多字,例如 ”I have a pencil.” 這行字就有 I , have , a , pencil 這四個字,即此行字數為 4 。所以現在要請你幫忙設計一個程式來計算一行文字的字 數及各個字母出現的次數。
輸入說明 :
輸入一行正常的英文文字,也就是不要有開頭是空白或是有連續兩個 空白的情形發生,並且內容只能包含英文字母、空白、逗點、句點。 注意 : 輸入的字串長度最多是 100 。
輸出說明 :
第一行輸出一個正整數 n ,表示此行文字的字數。 第二行開始依序輸出在此行文字中有出現的字母及出現的次數。 注意 : 大小寫要分開計算。
格式:出現的字母(空格):(空格)出現的次數
範例 :
在電腦科學上 ,計算一串文字上各個字母出現的頻率是常被用到的技術,這對壓縮來講是很重要的資訊,而計算字數也可以幫助人們作校正的工具。一行文字被空白、逗點或是句點所分隔而形成很多字,例如 ”I have a pencil.” 這行字就有 I , have , a , pencil 這四個字,即此行字數為 4 。所以現在要請你幫忙設計一個程式來計算一行文字的字 數及各個字母出現的次數。
輸入說明 :
輸入一行正常的英文文字,也就是不要有開頭是空白或是有連續兩個 空白的情形發生,並且內容只能包含英文字母、空白、逗點、句點。 注意 : 輸入的字串長度最多是 100 。
輸出說明 :
第一行輸出一個正整數 n ,表示此行文字的字數。 第二行開始依序輸出在此行文字中有出現的字母及出現的次數。 注意 : 大小寫要分開計算。
格式:出現的字母(空格):(空格)出現的次數
範例 :
Sample Input: | Sample Output: |
I had a dog | 4 a : 2 d : 2 g : 1 h : 1 I : 1 o : 1 |
- #include <iostream>
- #include <string.h> //strcpy()
- using namespace std;
- int main() {
- // [C_ST21-易] 文字及字母出現次數
- string text; //輸入的字串
- int len = 0; //有多少句子
- getline(cin, text);//使用者輸入(整行讀取包含空白)
- int arr[26][2];//儲存大小寫英文的數量,[0]大寫,[1]小寫
- int count = text.size();//string 長度
- char result[count]; //存入結果
- strcpy(result, text.c_str());//string to char
- for(int i = 0;i < 26;i++)//陣列歸零
- {
- for(int j = 0;j < 2;j++)
- {
- arr[i][j] = 0;
- }
- }
- for(int i = 0;i < count;i++)
- {
- if(result[i] == 32 || result[i] == 46)
- //因為逗號後面都有一個空白,所以逗號不用算,算逗號後的空白即可
- {
- len++;
- }
- else if(90 >= result[i] && result[i] >= 65)//大寫
- {
- arr[result[i]-65][0]++;
- }
- else if(122 >= result[i] && result[i] >= 97)//小寫
- {
- arr[result[i]-97][1]++;
- }
- }
- if((result[count-1] == 32 || result[count-1] == 44 || result[count-1] == 46)&&(result[0] == 32 || result[0] == 44 || result[0] == 46))
- {
- cout << len-1 << endl;
- }
- else if((result[count-1] == 32 || result[count-1] == 44 || result[count-1] == 46)||(result[0] == 32 || result[0] == 44 || result[0] == 46))
- {
- cout << len << endl;
- }
- else
- {
- cout << len+1 << endl;
- }
- for(int i = 0;i < 26;i++)
- {
- for(int j = 0;j < 2;j++)
- {
- if(arr[i][j] != 0)
- {
- if(j==0)//大寫
- {
- cout << char(i+65) << " : " << arr[i][j]<< endl;
- }
- if(j==1)//小寫
- {
- cout << char(i+97) << " : " << arr[i][j]<< endl;
- }
- }
- }
- }
- return 0;
- }
沒有留言:
張貼留言