sortowanie znakow polskich

0

Cześć
Mam sortowanie alfabetyczne względem tablicy ASCII, jednak wariuje ono przy znakach polskich (ł, ż, ą ....). Znaczy się że są one dopiero na końcu alfabetu. Moge je powpychać na siłę do środka ASCII, ale nie chce się tak bawić.

  1. Ma ktoś jakiś sposob (kryterium sortowania alfabetycznego) aby sortowało względem polskiego alfabetu??
  2. Może jest już gdzieś zapisana tablica z powstawianymi odpowiedznio znakami polskimi?? Lenia mam.

Dzięki

0

Szkoda, ze nie podales OS-a. W WinAPI jest jakas funkcja porownujaca wedlug ANSI (wiec jak jest ustawiony odpowiedni jezyk w windowsie to posortuje). Jeszcze nie zdazylem zainstalowac MSDN, wiec nie powiem.

0

najlatwiejsza metoda, ale zarazem bardzo powolna i malo wydajna jest zastosowanie podstawien - alfabet porzadkujesz w kolejnosci alfabetu polskiego, przypisujesz im pewne przypisania liczbowe i sortujesz wg. nich.
Do tego celu mozesz uzyc tablicy, wstawiajac do niej w odpowiedniej kolejnosci litery np. a,ą i sortowac po indeksach (po podstawieniach).

0

najlatwiejsza metoda, ale zarazem bardzo powolna i malo wydajna jest zastosowanie podstawien

To zależy... Najlepiej wszystkie dane przeznacznone do sortowania zakodować przed sortowaniem i rozkodować po nim. Jesli natomiast będziesz dynamicznie kodował przy każdym porównaniu, to faktycznie jest to bardzo mało wydajne.

0

Poza tym największe odchylenie indexu w takiej 'zastępczej' tablicy char[256] w stosunku do normalnych ASCII będzie wynosiło tyle, ile jest wszystkich polskich znaków diakrytycznych...

PS> Chyba, że czegoś nie pojąłem [niewinnosc]

<font color="blue">[</span><font color="red">ADD</span><font color="blue">]</span>
Chodziło mi o to, że w stworzonej tablicy char[256] będą umieszczone znaki ASCII w ich kolejności, z tym że np. znak 'A' będzie na pozycji 65, ale już na następnej pozycji (66) będzie znak 'Ą' (więc znak 'B' będzie dopiero 67-my). W ten sposób różnica między 'wartością' znaku ASCII, a jego pozycją w naszej tablicy będzie stosunkowo niewielka i zostanie nam do przeszukania zaledwie kilkanaście (a może i mniej) jej elementów.

0

Panowie : właśnie tego chciałem uniknąć - robienia własnej tablicy z polskimi znakami (z czystego lenistwa nie chce mi sie wpisywać ą pomiędzy a i b;/, mimo iz to kilka znaków), pewnie będę musiał zrobić.
Byłem ciekaw czy może ktoś już coś takiego napisał. Będę musiał sam:).
Mimo wszystko dzięki

0
char Pol[19] = "ĄĆĘŁŃÓŚŹŻąćęłńóśźż";
char Lat[19] = "ACELNOSZZacelnoszz";
char *wynik = new char[256];
for(int i=1; i<256; i++)
  {
  unsigned char znak = (char)i;
  bool jest=0;
  //sprawdzamy, czy znak jest zawarty w tablicy z polskimi literami:
  for(int j=0; j<19; j++)
    {
      if(znak == Lat[j])
        {
        jest = 1;
        wynik[i] = Lat[j];
        wynik [++i] = Pol[j];
        break;
        }
      else
      if(znak == Pol[j])
        {
        jest = 1;
        //to go olewamy...
        break;
        }
    }
 if(!jest)
 wynik[i] = znak;
 }

/*I tu spokojnie sobie leży tablica ze znakami w lekko zmodyfikowanej kolejności w stosunku do ASCII*/

delete wynik;

Sorry za wygląd [i trochę nieoptymalność] tego, ale pisane na szybko...

1 użytkowników online, w tym zalogowanych: 0, gości: 1