我有一个由斯洛文尼亚字符组成的字符串,例如(žiga,špela,črt,...),我需要按字母顺序排序这个字符串,我想要使用循环而不使用任何内置函数的问题。 NET就像array.Sort()
。
static string[] SortByName(string[] fullname)
{
char[] abc =
{
'a', 'b', 'c', 'č', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 'š','t', 'u', 'v', 'z', 'ž'
};
int counter = 0;
for (int i = 0; i<abc.Length;i++)
{
for (int j = 0; j < fullname[counter].Length; j++)
{
// I still cant figure out what i can do here
}
counter++;
}
}
答案 0 :(得分:1)
在您的计划中,char
数组abc
按顺序存储所有斯洛文尼亚字母。您可以使用此数组作为对所有斯洛文尼亚字母的排名的参考,以比较斯洛文尼亚语单词。在下面的代码中,我定义了一个方法CompareSl()
来比较斯洛文尼亚语单词,就像Compare()
类的String
方法比较英语单词一样。 (方法index()
返回数组abc中字符的索引。)
String 类的 Compare()方法将两个字符串 s1 和 s2 作为参数并且<登记/> ♦如果字符串相等则返回0 ♦如果 s1&gt;返回(+)ve。 S2 强>
♦如果 s1&lt;返回( - )ve s2
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
或Unicode
,但ANSI
不支持斯洛文尼亚。确保您的系统支持Slovene以获得正确的输出。
希望这有帮助。
答案 1 :(得分:0)
也许你可以这样做:
private char[] charList = { 'a', 'b', 'c', 'č', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 'š', 't', 'u', 'v', 'z', 'ž' };
public string[] Sort(string inputStr)
{
string[] sortedChars = new string[inputStr.Length];
int index = 0;
for (int i = 0; i < charList.Length; i++)
{
for (int u = 0; u < inputStr.Length; u++)
{
sortedChars[index] = inputStr[u];
index++;
}
if (index == inputStr.Length)
return sortedChars;
}
return sortedChars;
}
我没有测试过代码,因此不确定它是否有效,但它的作用是: 通过chars迭代,所以它在inputString的每个char上搜索“a”,如果它在那里它将被添加到已排序的字符串[],然后当它完成第一个char,下一个...等等< / p>
可能有一些错误,也许你可以改进代码。