任務2(字元數組和字元串):給出一個字元數組char str[],在程式中賦初值為一個句子,例如char str[]=”he threw threefree throws”,自編函數完成下面的功能:
(1)求出字元數組中字元的個數(從第一個字元讀起,直到讀到’\0’結束計數)(對于例句,輸出為26);
(2)計算句子中各字元出現的頻數
算法提示:
(a) i=0
(b)取字元串中的第i個符号c
(c)如果在c未在i之前出現過,在i位置上是第一次出現,頻數f=1,從i+1位置到字元串結束,c每出現一次,f++,最後輸出c-f(即字元-頻數)對;如果在c在i之前出現過,則代表c字元已經計算過頻數,不再處理,直接轉(d)步;
(d)i++,若處理完,轉(b)步;
可以動腦想想,或者集體讨論一下還可以采用什麼算法完成這一道題,可能的算法很多。
實驗目的:學會操作字元數組
實驗内容:完成對字元數組的操作
運作結果:(貼圖)
經驗積累: 算法有些麻煩,但思路也算清晰,以後要習慣于将大腦中所想的過程自然地轉換為代碼
下面再給出兩個不同思想的算法供參考。有些同學們也想到了,不過有不少存在些小問題
算法2:
總結:(1)這個算法使計數過程簡單了,但卻需要一個較高代價的工作:排序。如果直接對s 排序,還有産生副作用的危險,不太提倡;(2)請在本解中研究一下對相同字元相鄰的字元數組計數的算法。
算法3
總結:這是用空間換時間,通過count這個較大的數組,使計數簡單地累加就行了。
算法4:
下面是對“he threw three free throws”統計時,正在統計字元“e”(i=1)時單步執行中的一個截屏。可以看到其中的一些字元數組元素的值(下标為0,1,4,6,10)已經為空字元。