2016-08-03 4 views
0

Ich habe eine Zeichenfolge besteht aus slowenischen Zeichen wie (žiga, špela, črt, ...) und ich muss diese Zeichenfolge alphabetisch sortieren, das Problem, das ich nur Schleifen ohne Verwendung einer eingebauten Funktion in .NET tun möchte wie .Wie sortiere ich ein Array von nicht-englischen (slowenischen) Wörtern in C#?

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

Was ist das Problem beim Erstellen eines 'Comparer' und verwenden Sie' Sort'? –

+1

@Omar versuchen mit Kultur 'Array.Sort (abc, StringComparer.InvariantCulture);' – sawbeanraz

+0

es ist eine Aufgabe und nur Schleifen nicht mehr verwenden – Omar

Antwort

1

In Ihrem Programm speichert das char Array abc alle slowenischen Alphabete in Reihenfolge. Sie können dieses Array als Referenz zu den Rängen aller slowenischen Alphabete zu verwenden, vergleichen Sie die slowenischen Wörter. Im folgenden Code habe ich eine Methode CompareSl() definiert, um slowenische Wörter zu vergleichen, genau wie die Compare() Methode der String Klasse vergleicht englische Wörter. (Die Methode index() den Index eines Zeichens in dem Array abc zurückgibt.)

Die Vergleichen() Verfahren der String Klasse nimmt zwei Strings s1 und s2 als Argumente und
♦ gibt 0 zurück, wenn die Strings gleich
♦ Returns (+) sind ve wenn s1> s2
♦ Returns (-) ve wenn s1 < 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; 
    } 
} 

OUTPUT:

Unsorted array is 
ziga , spela , crt , 

Sorted array is 
crt , spela , ziga 

Hinweis: Die Zeichen ž, š und č wurde umgewandelt z, s und c jeweils weil die Plattform ich den Code lief auf nicht gesetzt zu UTF-8 oder Unicode, die Slowenisch unterstützen, aber ANSI, die Slowenisch nicht unterstützt. Stellen Sie sicher, dass Ihr System Slowenisch unterstützt, um die korrekte Ausgabe zu erhalten.

Hoffe, das hilft.

0

Vielleicht könnten Sie etwas tun:

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; 
} 

ich den Code nicht getestet haben, so nicht sicher, dass es funktioniert, aber was es tut, ist: Iterate die Zeichen Trog, so dass es Sucht in jedem char des inputString nach "a", wenn es dort ist, wird es zur sortierten Zeichenkette [] hinzugefügt, und wenn es mit dem ersten Zeichen endet, wird das nächste ... etc.

Wahrscheinlich gibt es einen Fehler, vielleicht können Sie den Code verbessern.

+0

es funktioniert nicht, ich ried, um den Code zu beheben, aber immer noch nicht funktioniert – Omar

+0

Wow, Ich denke, ich habe deine Frage völlig falsch verstanden. Ich habe den Code geändert, aber der Code bestand darin, die Zeichen in jeder Zeichenfolge wie folgt zu sortieren: ziga-> agiž. Ich fühle mich jetzt so dumm: P – null