将“a”或“an”添加到随机生成的字符串中

时间:2011-10-25 21:37:10

标签: ruby character

如何在随机生成的字符串中添加“a”或“an”?

随机生成器是post[rand(post.length)]

当帖子以元音或辅音开头时,如何自动为上述结果添加“a”或“an”?

3 个答案:

答案 0 :(得分:2)

有趣。 在我看来,这里的算法必须查看“a”或“an”之后单词开头的语音发音。仅仅看辅音和元音是不够的。例如,以下是一些明显的选择和一些需要考虑的例外情况:

一次性的事情 衡量单位
一个沉重的概念 高度评价 要打败的鸡蛋 历史性的时刻 一个诚实的人 事物的所有者
以眼还眼

我想OP的答案将来自回答:“有没有一种算法来描述单词的语音发音?”如果要跟随的单词以元音声音开头,则使用'an'否则,使用'a'

我想知道这是否会有所帮助:http://creativyst.com/Doc/Articles/SoundEx1/SoundEx1.htm

答案 1 :(得分:0)

当帖子以元音或辅音开头时,我理解:如果它以字母开头(没有数字或特殊符号)。

这应该修改你的字符串:

  (randomstring << 'a') if randomstring =~ /\A\w/i

或者用一点点示例:

%w{
  ebbbbb
  debbbbb
  .debbbbb
}.each{|randomstring|
  (randomstring << 'a') if randomstring =~ /\A\w/i
  p randomstring 
}

答案 2 :(得分:0)

如果string包含您随机生成的字符串,则new_string将包含一个输出字符串,前面带有“a”或“an”字样:

new_string = (string=~/^[aeiou]/i ? 'an ' : 'a ') + string

此方法未考虑输入字符串上的初始值的情况,并尝试适当替换。如果你必须处理句子的开头,这只是一个问题。

即使您确实需要处理句子的开头,我建议您保持简单并采用直接的方法检查第一个字母是否为大写,然后构建new_string在每种情况下略有不同:对于小写值,请执行上述操作,但对于大写值,您应该对输入字符串的第一个字母进行缩写,并在三元条件中对A进行填充。

最后,请注意我的示例代码不安全:它假定字符串已经是字符串对象,而不是其他东西(如nil)。你如何处理错误的输入取决于你正在做什么,但每次调用string时.to_s至少会使它不会崩溃。