我尝试从此字符串中删除1个空格:
m y r e a l n a m e i s d o n a l d d u c k
预期结果:
my real name is donald duck
我的代码是:
def solve_cipher(input)
input.split('').map { |c| (c.ord - 3).chr }.join(' ') # <- Here I tried everything
end
puts solve_cipher('p| uhdo qdph lv grqdog gxfn')
# => m y r e a l n a m e i s d o n a l d d u c k
我尝试了一切来解决我的问题,例如:
input.....join(' ').squeeze(" ").strip # => m y r e a l n a m e...
或
input.....join.gsub(' ','') # => myrealnameisdonaldduck
或
input.....join(' ').lstrip # => m y r e a l n a m e...
依旧......
答案 0 :(得分:5)
好吧,您可以先将字符串拆分为单词,然后将每个单词拆分为字符。使用您在代码中使用的相同方法,它可能看起来像这样。
def solve_cipher(input) input.split(' ').map{ |w| w.split('').map { |c| (c.ord - 3).chr}.join('')}.join(' ') end
当加入同一个单词中的字符时,我们之间没有空格;当我们一起加入这些单词时,我们在它们之间放了一个空格。
答案 1 :(得分:3)
如问题中所述,您使用的是Rails,因此您也可以尝试squish
方法:
def solve_cipher( input )
input.split(' ').map(&:squish).join(' ')
end
答案 2 :(得分:3)
main = do
x <- cFunc <^ "hello" <^> (10 :: Int) ^> 'a'
print x
cFunc :: CString -> CInt -> CChar -> IO ()
cFunc _ _ _ = pure ()
正则表达式匹配空白字符后面没有其他空白字符,并用空字符串替换匹配的字符。 str = "m y r e a l n a m e i s d o n a l d d u c k"
str.gsub(/\s(?!\s)/,'')
#=> "my real name is donald duck"
是一个与空白相匹配的负向前瞻。
如果单词之间可能存在两个以上的空格,请先用两个空格替换三个或更多空格,如下所示。
(?!\s)
答案 3 :(得分:1)
我知道这不是一种花哨的方式,但是你可以尝试创建一个新的字符串,并且函数traversal(input)
的计数器从0开始,这将返回这个新的字符串。
它将通过你的输入(这是你的字符串),如果计数器是0并且它看到一个空格它只是忽略它,增加一个计数器并转到字符串的下一个字符。
如果计数器不同于0并且它看到一个空格,它只是将它连接到新字符串。
如果计数器不同于0并且它看到一些不同的空格,它会将它连接到新字符串并且计数器再次等于0。
答案 4 :(得分:1)
诀窍是使用捕获组
&#34;我是一个人,他们是一个&#34; .gsub(/(\ s)(。)/,&#39; \ 2&#39;)
=&GT; &#34;我的真名是donald duck