Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: strings sortieren; wie? Kategorie: Programmierung (von André H. - 29.03.2004 9:39)
Als Antwort auf Re: strings sortieren; wie? von Till von Thile - 14.03.2004 2:07
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT_V2, OSOPT V3.0
Hallo Till,

> ...
>  (nicht zuletzt wegen eines böse verwurmten Rechners)  ...

Das passiert schnell, wenn man M$-Produkte für's Web benutzt.
Darum verwende ich keine M$-Produkte wenn es um die Web-Kommunikation geht.
(Browser & Mail, Proxy etc.)

> Die bekannte compstr()- Funktion stellt leider nur fest, ob zwei Strings identisch sind, nicht aber
> ob grö�er oder kleiner.

Stimmt, das kann sie nicht. Jedoch kann man die Funktion sehr leicht modifizieren:
//--Strings vergleichen-----------------------------------
  function comp2 ( byte s1[], byte s2[]) returns int
//--------------------------------------------------------
// Rückabe: -1 s2 ist "keiner", 1= s2 ist "grö�er", 0=s2 ist gleich s1
{byte i;
 for i=0 ... 29 if s1[i]!=s2[i] break;
 if i==30
   return 0;
  else
  {
   if s1[i]<s2[i] return 1; else return -1;
  }
}


Natürlich ist das nur ein Bytevergleich. Denn es werden nur die Bytewerte
der einzelnen Zeichen verglichen.
Wenn unabhängig von Gro�-Kleinschreibung verglichen werden soll, mu�
man die Zeichen erst in ein definiertes Format wandeln.
Also z.B. nur Kleinschreibung.
Hier kann man die Funktion mit strx.LCase() kombinieren oder
man richtet ein Konstantenarray mit bis zu 256 Elemtenen ein.
Die Index-Nr. des Arrays entspricht dem ASCII-Code und der Inhalt
der Reihenfolge, also der Indexposition der einzelnen Zeichen:

const sort[]=0,...,0x30/*ASCII 0x30*/,...,0x39/*ASCII 0x39*/,...,
             ...,0x41/*A*/,...,...,0x5A/*Z*/,...
             ...,0x41/*a=0x91*/,...,...,0x5A/*z=0x7A*/,...,...;

So kann man z.B. auch bestimmen, wie mit Umlauten umgegangen werden soll, oder
daÃ? alles Sonderzeichen in der Reihenfolge zuerst kommen sollen.


> Man mü�te also Zeichen für Zeichen in ASCII- Werte umwandeln und die dann vergleichen.
> In BASIC wäre das z.B.   a = asc(x$(n,n)).
> Leider habe ich in C2 keine Funktion gefunden, die das kann.

Als Grundregel gilt:
Funktionen, die es nicht gibt, kann man meist sehr einfach selbst schreiben.
Jedoch hättest Du nur die Funktion strx.getchar() ansehen müssen.
Diese gibt das Zeichen der angegebenen Position zurück.

Wenn man die Funktion mit dem oben genannten Array kombiniert,
kommt folgendes heraus:
function getCharSortPos(byte s[], byte pos) returns byte
{
 return sort[s[pos]];
}


MfG André H.



Antworten bitte nur ins Forum!
Fragen per EMail auf Forum-Postings werden nicht beantwortet!

Das macht meine Heizung gerade


    Antwort schreiben


Antworten:

Re: strings sortieren; wie? (von Till von Thile - 30.03.2004 0:52)