如何在随机生成的字符串中添加“a”或“an”?
随机生成器是post[rand(post.length)]
。
当帖子以元音或辅音开头时,如何自动为上述结果添加“a”或“an”?
答案 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至少会使它不会崩溃。