我的程序计算已处理字符串的字母数。我也想计算字符串的数量,但我不知道如何,我还没有在谷歌找到任何有用的东西。谢谢你的耐心等待。
|s b|
b := Bag new.
[s := stdin nextLine. s ~= 'exit'] whileTrue: [
s do: [:c |
b add: c.
].
].
b displayNl.
答案 0 :(得分:2)
据我所知,你想要计算一组字符串中字母的出现次数。首先,我建议你在客户输入时不要这样做(除非你真的需要立即做出反应)。
现在假设您将所有输入收集到名为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
答案 1 :(得分:1)
如果你想计算从stdin读取的行数,你可以像任何命令式语言一样:使用计数器。
| 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.