在您的程序中,char 数组 abc 按顺序存储所有斯洛文尼亚字母。您可以将此数组用作对所有斯洛文尼亚语字母的排名的参考,以比较斯洛文尼亚语单词。在下面的代码中,我定义了一个方法CompareSl() 来比较斯洛文尼亚语单词,就像String 类的Compare() 方法比较英语单词一样。 (方法index()返回一个字符在数组abc中的索引。)
String 类的 Compare() 方法接受两个字符串 s1 和 s2 作为参数,并且
♦ 如果字符串相等则返回 0
♦ 如果 s1 > s2
则返回 (+)ve
♦ 如果 s1
则返回 (-)ve
using System;
class Sl_Sort{
static void Main(){
string[] words = new string[]{"žiga", "špela", "črt"};
Console.WriteLine("Unsorted array is");
foreach(String st in words)
Console.Write(st+" , ");
//do selection sort to sort in ascending order
for(int i=0; i<words.Length-1;i++){
int min = i;
for(int j=i+1; j<words.Length;j++){
if(CompareSl(words[min], words[j]) > 0)
min = j;
}
string temp = words[i];
words[i] = words[min];
words[min] = temp;
}
Console.WriteLine("\nSorted array is");
foreach(String st in words)
Console.Write(st+" , ");
Console.ReadKey(); //waits till user presses a key before terminating
}
public static int CompareSl(string s1, string s2){
if(s1.Length == s2.Length){
for(int i=0; i<s1.Length; i++){
if(s1[i] != s2[i])
return index(s1[i]) - index(s2[i]);
}
}
else{
String s = s1.Length<s2.Length?s1:s2;
for(int i=0; i<s.Length; i++){
if(s1[i] != s2[i])
return index(s1[i]) - index(s2[i]);
}
if(s == s1)
return -1;
else
return 1;
}
return 0;
}
private static int index(char c){
char[] abc = { 'a', 'b', 'c', 'č', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 'š', 't', 'u', 'v', 'z', 'ž' };
for(int i=0; i<abc.Length; i++){
if(abc[i]==c)
return i;
}
return -1;
}
}
输出:
Unsorted array is
ziga , spela , crt ,
Sorted array is
crt , spela , ziga
注意:字符 ž、š 和 č 分别转换为 z、s 和 c,因为我运行代码的平台未设置为 UTF-8 或 @ 987654336@,支持斯洛文尼亚语,但ANSI,不支持斯洛文尼亚语。确保您的系统支持 Slovene 以获得正确的输出。
希望这会有所帮助。