-4

对于以下问题,我无法从字符串中提取数值。我已经阅读了此处包含的文件http://projecteuler.net/project/words.txt并且我成功阅读了它,但我不知道我的 switch-case 是否工作不正常或者我是否遇到了数组问题,我主要用 C++ 编程并且正在尝试学习 ruby​​,所以我对 ruby​​ 语法的理解充其量仍然是初级的

    #!/usr/bin/ruby -w

words = []
words = File::read("words.txt") 
parts = words.split(',')
puts parts
c=0
while parts != "YOUTH"
    a=0
    case parts
        when 'A'
            a+=1
        when 'B'
            a+=2
        when 'C'
            a+=3
        when 'D'
            a+=4
        when 'E'
            a+=5
        when 'F'
            a+=6
        when 'G'
            a+=7
        when 'H'
            a+=8
        when 'I'
            a+=9
        when 'J'
            a+=10
        when 'K'
            a+=11
        when 'L'
            a+=12
        when 'M'
            a+=13
        when 'N'
            a+=14
        when 'O'
            a+=15
        when 'P'
            a+=16
        when 'Q'
            a+=17
        when 'R'
            a+=18
        when 'S'
            a+=19
        when 'T'
            a+=20
        when 'U'
            a+=21
        when 'V'
            a+=22
        when 'W'
            a+=23
        when 'X'
            a+=24
        when 'Y'
            a+=25
        when 'Z'
            a+=26
    end
    b = false
    i = 1
    k= 0
    while b = false
        k += i  
        i += 1
        if a == k || i >15
            b == true
        end
    end
end
4

3 回答 3

0

我不确定这段代码应该计算什么,但我已经编辑了你的代码,从逻辑的角度来看是有意义的:

#!/usr/bin/ruby -w

words = File::read("words.txt") ;
parts = words.delete('\"').split(',');
puts parts
c=0
while(c<parts.length)
    a=0
    each_word = parts[c].split('');
    for i in 0...each_word.length
        case each_word[i]
            when 'A'
                a+=1
            when 'B'
                a+=2
            when 'C'
                a+=3
            when 'D'
                a+=4
            when 'E'
                a+=5
            when 'F'
                a+=6
            when 'G'
                a+=7
            when 'H'
                a+=8
            when 'I'
                a+=9
            when 'J'
                a+=10
            when 'K'
                a+=11
            when 'L'
                a+=12
            when 'M'
                a+=13
            when 'N'
                a+=14
            when 'O'
                a+=15
            when 'P'
                a+=16
            when 'Q'
                a+=17
            when 'R'
                a+=18
            when 'S'
                a+=19
            when 'T'
                a+=20
            when 'U'
                a+=21
            when 'V'
                a+=22
            when 'W'
                a+=23
            when 'X'
                a+=24
            when 'Y'
                a+=25
            when 'Z'
                a+=26
        end
    end
    b = false
    i = 1
    k = 0
    while(b == false)
        k += i  
        i += 1
        if((a == k) || (i > 15))
            b = true
        end
    end
    c +=1;
end
于 2013-03-26T16:53:31.740 回答
0

Here is the official Doc

好的!所以这里有一些提示你的问题:

"string".split(//)
#=> ["s", "t", "r", "i", "n", "g"]
"string".split(//).first
#=> "s"
"string".split(//).first(1)
#=> ["s"]
"string".split(//).first(3)
#=> ["s", "t", "r"]

还有一些解决问题的方法:

"string".split(//)[0]
#=> "s"
"string".split(//)[1]
#=> "t"
"string".split(//)[0,4]
#=> ["s", "t", "r", "i"]
于 2013-03-26T16:39:25.230 回答
0

您需要将部分转换为 char 数组,如下所示:

parts.split(//)

或者

parts.chars.to_a

然后遍历 char 数组。

于 2013-03-26T16:40:34.070 回答