找不到从文件中读取的字符串的值

时间:2013-03-26 16:26:42

标签: ruby arrays string

我遇到以下问题的字符串数值时遇到问题。 我已经从这里包含的文件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

3 个答案:

答案 0 :(得分: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"]

答案 1 :(得分:0)

您需要将部件转换为char数组,方法如下:

parts.split(//)

parts.chars.to_a

然后迭代char数组。

答案 2 :(得分: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