您将获得一个字符串S.计算字符串S中所有数字的出现次数。
输入: 第一行包含字符串S
输出: 计算输入数字中出现的次数1并打印输出。 我试图尝试这样的问题:
number=$stdin.gets.chomp
number.split('').map(&:to_i)
number.each do |numbers|
i==0
while numbers===1
i+=1
end
end
puts i
但是,它没有执行。 有人可以建议我怎么做?
答案 0 :(得分:5)
在ruby中以干净的方式做你想要的事情
number=$stdin.gets.chomp
number.count('1')
答案 1 :(得分:4)
str = "1a2b &32T2*3"
您可以计算字符串中的总位数,如下所示:
str.count('0123456789')
#=> 6
如果您希望计算字符串中每个数字的出现次数,您可以使用计算哈希(参见Hash::new):
str.each_char.with_object(Hash.new(0)) { |c,h| h[c] += 1 if c =~ /\d/ }
#=> {"1"=>1, "2"=>3, "3"=>2}
或使用方法Enumerable#group_by:
h = str.each_char.group_by(&:itself).select { |k,_| k =~ /\d/ }
#=> {"1"=>["1"], "2"=>["2", "2", "2"], "3"=>["3", "3"]}
h.update(h) { |*,v| v.count }
#=> {"1"=>1, "2"=>3, "3"=>2}
这使用Hash#update(aka merge!
)的形式,它使用一个块来确定合并的两个哈希中存在的键的值(这里是所有键)。有关详细信息,请参阅文档。
答案 2 :(得分:2)
您的代码存在一些问题。首先,您实际上没有将numbers
设置为数组,您可以通过说numbers = numbers.split('').map(&:to_i)
然后你应该在循环之外声明i
变量。不要说i == 0
,而是使用i = 0
作为赋值运算符
您应该使用while
语句,而不是使用if
循环。
此代码假设您的字符串只是所有数字。
numbers = $stdin.gets.chomp
numbers = numbers.split('').map(&:to_i)
i = 0
numbers.each do |number|
if number === 1
i += 1
end
end
如果您的字符串由字母,数字或特殊字符组成,则可以执行此操作
numbers = $stdin.gets.chomp
numbers.split('').select { |c| c=~ /1/ }.length