我正在编写一个程序来对西班牙语单词进行排序。这些字母几乎与英文字母相同,但只有少数例外。
a,b,c,ch,d,e,f,g,h,i,j,k,l,ll,m,n,ñ,o,p,q,r,rr,s,t,u,v,w,x,y,z
此外,对于这个问题,假设任何一个可以代表字母的字符都可以;例如,组合ch将始终表示字母ch,而不是字母c后跟字母h。
现在如果没有额外的字母,我可以轻松地排序,但是你能帮助我想一个算法来帮我分类吗?
答案 0 :(得分:11)
通常,应使用Collator进行特定于语言的排序以进行字符串比较。对于西班牙语,您可以使用:
Collator collator = Collator.getInstance(new Locale("es", "ES"));
如果这是家庭作业,我想你自己需要拿出一些东西。
答案 1 :(得分:1)
我只是将每个字母(从组合开始)映射为2位数字(从10开始)。
a - 10 b - 11 c - 12 ch - 13 d - 14 等
诀窍是在搜索单字母之前先搜索成对的字母(ch,ll,rr)。
所以 - 采取像llave这样的步骤将是
23ave 2310ve 231035e 23103515
如果您将数字排序为字符串(以便1111在90之前出现),则应该生成正确的顺序。
如果您可以进行'排序',那么只需将数字与原始单词配对即可。使用您创建的数字作为排序键。
如果您无法进行“排序”,那么您需要将数字拆分回2位数代码,并在排序后将其转换回字母。
答案 2 :(得分:0)
您需要考虑该语言中拼写的具体细节,以决定“ll”是否为“l”“l”或实际上是“ll”。这对你来说很明显。
我提出这个问题的关键在于这是问题的症结所在。您将需要预处理输入,以便将这些不明确的双字母编码为一个字母。使用像普通的旧ASCII文本文件这样的商店媒体,这是不可能的。
您的另一个选择是依靠一些统计方法来确定信件配对是1个西班牙语字母还是2个字母。通过将整个单词的内容纳入上下文,您可以使用先验概率来确定这一点。贝叶斯技术可能运作良好。
答案 3 :(得分:0)
首先尝试将每个单词解析为一个数组或一组字母组,然后通过比较解析后的字母组进行排序。
答案 4 :(得分:0)