1

これは単純な問題ですが、何らかの理由でクリックされません。文字列内の文字を一定量繰り返したい。例えば:

str = 'abcde'
temp = ''
x = 8
for i in 0..x
    if str[i].nil?
        temp << ''
    else
        temp << str[i]
    end
end

入力がないことを除いて。私が必要なのは:

abcdeabc

助けていただければ幸いです。私の素朴なアプローチではなく、これを行うためのより良い方法がある場合は、知りたいです

4

5 に答える 5

4

使用ljustする必要があります:

str = 'abcde'

str.ljust(8, str)
# => "abcdeabc" 

str.ljust(12, str)
# => "abcdeabcdeab" 
于 2013-02-21T01:06:50.217 に答える
3

文字列を数回繰り返す場合は、を使用します*。これをスライスと組み合わせて、このソリューションを得ることができます。

def repfill(str, n)
    nrep = (Float(n) / str.length).ceil
    return (str * nrep)[0...n]
end

例:

irb(main):030:0> repfill('abcde', 8)
=> "abcdeabc"

あなたの解決策に関して、あなたが欠けているのは、文字列を最初から繰り返すためのモジュロです:

str = 'abcde'
temp = ''
x = 8
for i in 0...x # note ... to exclude last element of range
    temp << str[i % str.length]
end
于 2013-02-21T01:01:51.580 に答える
1

スライスを使用してこれを簡単に行うことができます

def repeat_x_chars(str, x)
  # special cases
  return str if x == 0
  return ""  if str.length == 0

  return str + str[0..(str.length % x)] # slicing
end
于 2013-02-21T00:59:58.137 に答える
0

このワンライナーを試してみてください:

res = (str * (x / str.length)) + str[0...(x%str.length)]
于 2013-02-21T01:04:02.510 に答える
0

アナログstr_repeat

"abcde" * 3   
#-> "abcdeabcdeabcde"
于 2019-10-18T07:24:17.887 に答える