代码在coderbytes中不起作用,但它在Cloud9中有效

时间:2015-05-27 21:55:08

标签: ruby cloud9-ide

在Cloud9中,我使用以下代码,它可以正常工作。

def LongestWord(sen)
  i = 0
  cha ="&@%*^$!~(){}|?<>"
  new = ""
  while i < sen.length
    i2 = 0
    ch = false
    while i2 < cha.length
      if sen[i] == cha[i2]
        ch = true
      end
      i2 += 1
    end

    if ch == false
      new += sen[i].to_s
    end
    i += 1
  end

  words = new.split(" ")
  longest = ""
  idx = 0
  count = 0
  while idx < words.length
    word = words[idx]

    if word.length > count
      longest = word
      count = word.length
    end
    idx += 1
  end   
  # code goes here
  return longest

end

# keep this function call here 
# to see how to enter arguments in Ruby scroll down   
LongestWord("beautifull word") 

在练习“最长词”中的Codebytes中,您必须在参数中使用相同的STDIN。它是相同的代码,但改变了参数,但它不起作用:

def LongestWord(sen)
  i = 0
  cha ="&@%*^$!~(){}|?<>"
  new = ""
  while i < sen.length
    i2 = 0
    ch = false
    while i2 < cha.length
      if sen[i] == cha[i2]
        ch = true
      end
      i2 += 1
    end

    if ch == false
      new += sen[i].to_s
    end
    i += 1
  end

  words = new.split(" ")
  longest = ""
  idx = 0
  count = 0
  while idx < words.length
    word = words[idx]

    if word.length > count
      longest = word
      count = word.length
    end
    idx += 1
  end   
  # code goes here
  return longest

end

# keep this function call here 
# to see how to enter arguments in Ruby scroll down   
LongestWord(STDIN.gets) 

我认为可能与浏览器产生某种冲突。输出显示了很多数字。有人可以帮我测试代码吗?感谢任何反馈,谢谢!

1 个答案:

答案 0 :(得分:0)

Coderbyte正在旧版本的Ruby上运行您的代码 - Ruby 1.8.7

在这个版本的Ruby中,使用像sen[i]这样的字符串的索引并不会返回i处的字符,而是返回该字符的数字ASCII值。这就是数字的来源。

要使代码能够在Ruby 1.8.7上运行,您可以将some_string[i]替换为some_string[i, 1] - 此变体返回从i开始的长度为1的子字符串,因此与some_string[i]在更新的Ruby版本中的行为。有关详细信息,请参阅文档here