ruby - 如何使用 ruby​​ 中的字符串进行多个组合?

标签 ruby string

输入应该是一个字符串:

"abcd@gmail.com"

输出应该是一个字符串数组:

["abcd@gmail.com",
 "a.bcd@gmail.com",
 "ab.cd@gmail.com",
 "abc.d@gmail.com",
 "a.b.cd@gmail.com",
 "a.bc.d@gmail.com",
 "a.b.c.d@gmail.com"]

想法:“在第一个字符串部分(“abcd”)中使用一个点进行所有可能的组合。不允许使用连续的点。在第一个字符串部分(“abcd")"

这是我到目前为止想出的:

text,s = "abcd".split""
i=0

def first_dot(text)
  text.insert 1,"."
end

def set_next_dot(text)
  i = text.rindex(".")
  text.delete_at i
  text.insert(i+1,".")
end

我的方法是

  1. 写一个函数,设置第一个点
  2. 编写一个设置下一个点的函数
  3. ...(魔法)

我不知道如何把这些碎片拼凑起来。任何想法?或者更好的方法? 提前谢谢

编辑: 我想我找到了解决方案 :) 我会在大约一小时后发布它(它很棒 -> 真值表、二进制数、换位)

...这里是解决方案

s = "abc"
states = s.length
possibilites = 2**states

def set_space_or_dot(value)
  value.gsub("0","").gsub("1",".")
end

def fill_with_leading_zeros(val, states)
  if val.length < states 
   "0"*(states-val.length)+val
  else
   val
  end
end

a = Array.new(possibilites,s)
a = a.map{|x| x.split ""}

b = [*0...possibilites].map{|x| x.to_s(2).to_s}
b = b.map{|x| fill_with_leading_zeros x,states} 
b = b.map{|x| x.split ""}

c = []

for i in 0 ... a.size
  c[i] = (set_space_or_dot (a[i].zip b[i]).join).strip
end

最佳答案

稍微改变一下 pduersteler 的答案:

possibilities = []
string = "abcd@example.com"
(string.split('@')[0].size-1).times do |pos|
  possibility = string.dup
  possibilities << possibility.insert(pos+1, '.')
end

关于ruby - 如何使用 ruby​​ 中的字符串进行多个组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10619466/

相关文章:

ruby-on-rails - RubyMine 3.1 上的 Rails 2.x 应用程序

perl - 在 Perl 中,如何简洁地检查 $variable 是否已定义并且包含非零长度字符串?

java - 在对 Map 进行排序时确定某些字符串优先级的最佳方法

c - 字符串数组初始化

Ruby selenium/capybara 等待元素消失

javascript - 从其他 Controller 访问我的 Action 编辑

ruby-on-rails - mini_portile 安装在 Digitalocean 上卡住

javascript - ""包围的 html 标签未呈现

c++ - 为什么我的简单字符串构造不正确?

ruby - IMAP (Ruby) : Fail to fetch/save audio (. wav) 格式正确的附件