我的程序计算处理的字符串的字母数。我也想计算字符串的数量,但我不知道如何,我还没有发现任何有用的东西在谷歌。谢谢你的耐心。我如何计算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