我的程序計算處理的字符串的字母數。我也想計算字符串的數量,但我不知道如何,我還沒有發現任何有用的東西在谷歌。謝謝你的耐心。我如何計算Smalltalk中處理字符串的數量?
|s b|
b := Bag new.
[s := stdin nextLine. s ~= 'exit'] whileTrue: [
s do: [:c |
b add: c.
].
].
b displayNl.
我的程序計算處理的字符串的字母數。我也想計算字符串的數量,但我不知道如何,我還沒有發現任何有用的東西在谷歌。謝謝你的耐心。我如何計算Smalltalk中處理字符串的數量?
|s b|
b := Bag new.
[s := stdin nextLine. s ~= 'exit'] whileTrue: [
s do: [:c |
b add: c.
].
].
b displayNl.
所以據我可以告訴你要計算字符串集合中的字母出現次數。首先,我建議你在客戶打字的時候不要這樣做(除非你真的需要立即作出反應)。
現在想象一下,您將所有輸入收集到一個名爲input
的變量中。爲了得到這些事件,你可以做input asBag
,這將把字符串(字符集合成一個袋子)。所以現在你完成了第一項任務。那麼這取決於你認爲什麼是一個詞。例如,您可以使用input substrings
將空白字符串(製表符,空格,換行符等)作爲分隔符將大字符串分解爲小字符串。否則,您可以使用input substrings: ','
指定要使用哪個分隔符(在本例中爲逗號)。現在要計算字符串中單詞的出現次數,您可以使用input substrings asBag
。
當然,如果你想這樣做,當用戶輸入的數據,你可以做這樣的事情:
|line characters words|
characters := Bag new.
words := Bag new.
[ line := stdin nextLine. line ~= 'exit'] whileTrue: [
characters addAll: line.
words addAll: line substrings
].
characters displayNl.
words displayNl
我會補充說'字符addAll:line'是什麼替代的做:[:c | b add:c]','s'扮演與'line'相同的角色。兩者都是等價的,但第一個比較特殊。 –
如果你要算行數從標準輸入讀取,你可以這樣做它像任何命令式語言一樣:使用計數器。
| numberOfLines s |
numberOfLines := 0.
[s := stdin nextLine. s ~= 'exit'] whileTrue: [
numberOfLines := numberOfLines + 1.
"..."].
numberOfLines displayNl.
或者,下面UKO的回答,收集所有的行到另一個集合,之後利用其規模:
| lines s |
lines := OrderedCollection new.
[s := stdin nextLine. s ~= 'exit'] whileTrue: [lines add: s. "..."].
lines size displayNl.
你能提供一個例子輸入和輸出?你的問題有點不清楚。 –
對不起我的壞。例如: 例如: 蘋果伏特加啤酒 – George312