如何将字符串添加到一起

时间:2016-09-30 22:01:48

标签: ruby

下面的代码输出333而不是9。

如何更改它以打印总和计算而不是字符串联?

puts 'What is your first name?'
first = gets.chomp
puts 'What is your middle name?'
middle = gets.chomp
puts 'What is your last name?'
last = gets.chomp
var1 = first.length.to_s
var2 = middle.length.to_s
var3 = last.length.to_s
puts 'Did you know there are '  + var1 + var2 + var3 + ' characters in your name, ' + first + ' ' +  middle + ' ' + last

3 个答案:

答案 0 :(得分:5)

问题是Ruby理解字符串和整数/数字之间的区别:

'c'.class  # => String
1.class # => Fixnum

如果要添加数字,则必须告诉Ruby从一个转换为另一个:

'1' + '2' # => "12"
1 + 2  # => 3

要将字符串值转换为数字,我们使用to_i

'1'.to_i + '2'.to_i # => 3

您已经知道chomp对于删除尾随的新行非常有用:

"a\n" # => "a\n"
"a\n".chomp # => "a"

但转换为数字时则没有必要。 to_i会将前导数字转换为数字并停在第一个非数字位置:

"1\n".chomp.to_i # => 1
"1\n".to_i # => 1

"12".to_i # => 12
"1 2".to_i # => 1

所以使用更容易:

"1\n".to_i # => 1

注意:to_i可以做的不仅仅是从数字的十进制(基数10)表示转换,它可以做其他基础:

"10000".to_i(2) # => 16
"20".to_i(8) # => 16
"10".to_i(16) # => 16

但这是成长的东西。

答案 1 :(得分:1)

这将有效:

puts 'What is your first name?'
first = gets.chomp

puts 'What is your middle name?'
middle = gets.chomp

puts 'What is your last name?'
last = gets.chomp

var1 = first.length
var2 = middle.length
var3 = last.length

puts "Did you know there are #{var1 + var2 + var3} characters in your name"

注意:要将var加在一起,您不应该转换为字符串。字符串插值需要双引号。良好的间距有助于提高可读性。

示例:

$ What is your first name?
#James
$ What is your middle name?
#Tiberius
$ What is your last name?
#Kirk 
#Did you know there are 17 characters in your name

答案 2 :(得分:0)

您首先将名称长度(整数)转换为字符串,然后尝试将它们添加到另一个字符串中。这就是长度显示为333的原因。不是将长度转换为字符串,而是将它们保持原样(删除.to_s)。然后对数字执行添加,最后转换为字符串。

var1 = first.length
var2 = middle.length
var3 = last.length

puts 'Did you know there are '  + (var1 + var2 + var3).to_s + ' characters in your name, ' + first + ' ' +  middle + ' ' + last