Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby GET是否生成一个带有额外空格、返回字符或为零的字符串?_Ruby_Gets - Fatal编程技术网

Ruby GET是否生成一个带有额外空格、返回字符或为零的字符串?

Ruby GET是否生成一个带有额外空格、返回字符或为零的字符串?,ruby,gets,Ruby,Gets,我编写了一个代码,用于使用简单的替换密码(a=b、b=c等)将纯文本消息转换为密码文本消息。空格被替换为“1” 然后,我想这样做,以便我可以使用“get”输入不同的消息。这导致了一个问题,我通过将“get”替换为“get.strip”解决了这个问题。如果GET在开头或结尾向类型化字符串添加空格,为什么会导致问题?我有一种处理空格的方法,所以它真的是一个“”还是一个零空格(因为没有更好的词)或者一个字符返回还是什么?这是我写的: base_alph =[" ", "a", "b", "c", "d

我编写了一个代码,用于使用简单的替换密码(a=b、b=c等)将纯文本消息转换为密码文本消息。空格被替换为“1”

然后,我想这样做,以便我可以使用“get”输入不同的消息。这导致了一个问题,我通过将“get”替换为“get.strip”解决了这个问题。如果GET在开头或结尾向类型化字符串添加空格,为什么会导致问题?我有一种处理空格的方法,所以它真的是一个“”还是一个零空格(因为没有更好的词)或者一个字符返回还是什么?这是我写的:

base_alph =[" ", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]  
code_alph = ["1", "z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y"]  
x=0  
base_msgarray = []  
code_msgarray = []  
puts "type what you want to translate below"  
base_msg = gets.strip # without the .strip the program doesn't run  
msg_size = base_msg.length  
puts "the message is translated as:"  

loop do  #this section populates an array with all the characters from the gets  
break if x >= msg_size  
base_msgarray.push(base_msg[x])  
x += 1  
end  
# this section passes in the values of the base_msgarray to |letter| to then determine its key   
# in base_alph then that key is passed into code_alph to find the translated letter which  
# is then used to populate the code_msgarray  
base_msgarray.each do |letter|  
code_index = base_alph.index(letter)  
code_msgarray.push(code_alph[code_index])  
end  
# this section displays the values of code_msgarray in a more text-like fashion  
code_msgarray.each do |codeletter|  
print codeletter  
end  
gets # for some reason if i dont have this here the terminal window disappears before I can read anything  
从:

获取(sep=$/)→ 字符串或零
[……]

ARGV
(或
$*
)中的文件列表返回下一行(并将其分配给
$);如果命令行上没有文件,则从标准输入返回下一行。在文件末尾返回
nil
。可选参数指定记录分隔符。分隔符包含在每个记录的内容中

注意最后一句:记录分隔符包含在每个记录的内容中。默认情况下,单独的记录是一个下线(通常是换行或回车/换行对),因此您将在字符串的末尾得到一个零散的
\n


您的调用将删除前导和尾随空格(包括CR和LF字符),这样问题就不会出现了。另一种常见的方法是,如果存在尾随的
$/
记录分隔符,则使用它将其剥离。

问题在于此。如果不使用strip,则会在输入后追加一个新行字符。 比如说

type what you want to translate below
rubyisgreat
如果使用get.strip,则base_msg的值

"rubyisgreat"
不带条带的base_msg的值

"rubyisgreat\n"
因此,由于“\n”不属于您的密码数组,因此在第行中查询其索引

code_index = base_alph.index(letter)
生产零。下一行中使用此nil作为

code_msgarray.push(code_alph[code_index])
这就是错误


给你个提示。使用“p base_msg”检查的准确值。还有一件事。您可能正在使用ruby,但您需要学习它。这个程序是用ruby编写的C语言。这不是红宝石的方式。这里使用散列而不是数组。如果可能的话,不要使用循环。

请给出实际输入和预期输出,以及代码中产生错误的部分。这反过来有助于我们快速帮助您。感谢您抽出时间回答我的问题。非常感谢!谢谢你富有洞察力的回答。我很感激你的建议,但恐怕我的知识还不足以知道如何实现它(我正在尝试自学编程,从Ruby开始,昨天是我第一次尝试)。我的理解是数组保持值的顺序(这在这里很重要..我希望文本在重新翻译为原始消息时),而散列可能会使值的顺序变得混乱。至于循环所做的,我将尝试以不同的方式来做。我正在使用lynda.com的“Ruby Essential Training”视频来学习它。你真的不必担心价值观变得混乱。密文和纯文本之间仍然存在一对一的对应关系。