統計字串

2021-07-24 08:29:08 字數 1519 閱讀 5663

1. 今日內容

問題描述

判斷乙個由 a-z 這 26 個字元組成的字串中哪個字元出現的次數最多

輸入:第 1 行是測試資料的組數 n,每組測試資料佔 1 行,是乙個由 a-z 這 26 個字元組

成的字串,每組測試資料之間有乙個空行,每行資料不超過 1000 個字元且非空

輸出:n 行,每行輸出對應乙個輸入。一行輸出包括出現次數最多的字元和該字元出現的

次數,中間是乙個空格。 如果有多個字元出現的次數相同且最多,那麼輸出 ascii 碼最小

的那乙個字元。

輸入樣例

2abbccc

adfadffasdf

輸出樣例

c 3f 4

問題分析

每讀入乙個字串,將這個字串作為乙個字元型陣列,依次判斷每個陣列元素分別是什

麼字母。統計出各個字母在字串中分別出現了多少次,找到出現次數最多的。這裡要注意

三點:(1) 輸入字串時,可以象一般變數一樣,一次輸入乙個字串。scanf 函式通過空格或

者回車字元判斷乙個字串的結束。而一般陣列在輸入時,每次只能輸入乙個陣列元

素。(2) 字串是乙個字元型陣列,可以象訪問一般陣列的元素一樣,通過下標訪問其中的各

個元素。scanf 函式輸入字串時,並不返回所輸入字串的長度。可以使用字串

處理函式 strlen 函式計算字串中包括多少個字元。

(3) 輸入的字串中,可能有多個字元出現的次數相同且最多的情況。此時要輸出 ascii 碼

最小的那乙個字元。

解決方案

102選擇合適的資料結構,是保持程式**簡潔、易讀、高效的關鍵。輸入字串的最大長度

是 1000 個字元,儲存這樣乙個字串需要乙個長度為 1001 的字元型陣列 str,其中陣列的

最後乙個元素儲存字串的結束標誌'\0'。定義乙個長度為 26 的專門整型陣列 sum,記錄在

乙個輸入字串中,每個字母的出現次數。字母 c 的出現次數記錄在陣列元素 sum[c-'a']中。

參考程式

#include #include int main()

}

常見錯誤

(1) 將陣列 str 的長度定義成 1000 而不是 1001,忽略了在字串的末尾,要新增表示字串

結束的額外標誌字元'\0'。在處理字串是要特別注意:儲存長度為 n 的字串時,所

使用的字元型陣列的長度必須大於、等於 n+1。

(2) 程式的 15~17 行判斷輸入字串中,哪個字元出現的次數最多。問題描述中,要求有多

個字元出現的次數相同且最多時,必須輸出 ascii 碼最小的字元。程式設計中常常不仔細,

將第 17 行判斷條件 sum[i]>sum[max] 替換成 sum[i]sum[max],從而將導致結果出錯:

有多個字元出現的次數相同且最多時,max 所指示將是 ascii 碼最大的字元。

我的總結,比較簡單,不多說了。

2. 時間還是沒有充足的利用,感到很慚愧,今天沒有看資料結構。

統計字串

題目 計算字串中字母 數字 其他字元的個數。datas segment buf db 80 len db string db 80 dup 32 crlf db 13,10,displ db the amount of letters is 13,10,dispd db the amount of ...

字串統計

演算法訓練 字串統計 時間限制 1.0s 記憶體限制 512.0mb 問題描述 給定乙個長度為n的字串s,還有乙個數字l,統計長度大於等於l的出現次數最多的子串 不同的出現可以相交 如果有多個,輸出最長的,如果仍然有多個,輸出第一次出現最早的。輸入格式 第一行乙個數字l。第二行是字串s。l大於0,且...

字串統計

time memory limit 1000 ms 32768 k submitted 2163 accepted 973 對於給定的乙個字串 長度小於1000 統計其中大小寫字母字元出現的次數。輸入資料有多行,第一行是乙個整數n,表示測試例項的個數,後面跟著n行,每行包括乙個由字母和數字組成的字串...