|
Viele der am häufigsten benötigten Routinen fallen in die Kategorie Stringmanipulation. Dazu zählen die üblichen Routinen zur Konvertierung von Zahlen nach Strings und umgekehrt sowie Routinen zum Formatieren von Strings.
Die vorliegende Bibliothek SISTRINGS.CPP faßt diese Routinen zusammen, um so die wichtigsten Funktionen in einem Modul griffbereit zu haben.
Konstanten
Die zugehörige Headerdatei SISTRING.H definiert drei Konstanten zur Stringformatierung:
|
Konstante
|
Bedeutung
|
|
STRLEFT
|
String linksbündig formatieren
|
|
STRCENTER
|
String zentriert formatieren
|
|
STRRIGHT
|
String rechtsbündig formatieren
|
Funktionen der Bibliothek
| |
int CleanStartChars(LPSTR S, char c)
CleanStartChars entfernt aus einem String alle führenden Zeichen, die c entsprechen.
Die Routine beginnt beim ersten Zeichen und arbeitet so lange, bis zum ersten Mal ein Zeichen ungleich c auftritt oder das Ende des Strings erreicht ist.
Als Funktionsergebnis liefert die Funktion die neue Länge des Strings.
| Funktion CleanStartChars |
|
Für den Ausgangsstring
0000000123009.009
liefert der Aufruf
CleanStartChars(S, '0');
den bereinigten String
123009.009
| Beispiel |
CleanStartBlanks(S : STRING) : STRING;
CleanStartBlanks entfernt aus einem String alle führenden Zeichen, die kleiner oder gleich #32 (Leerzeichen) sind. Die Routine beginnt beim ersten Zeichen und arbeitet so lange, bis zum ersten Mal ein Zeichen größer #32 auftritt oder das Ende des Strings erreicht ist.
Als Funktionsergebnis wird die Länge des resultierenden Strings geliefert.
| Funktion CleanStartBlanks |
int CleanEndBlanks(LPSTR S)
CleanEndBlanks entfernt aus einem String alle abschließenden Zeichen, die kleiner oder gleich #32 (Leerzeichen) sind. Die Routine beginnt beim letzten Zeichen und arbeitet so lange, bis zum ersten Mal ein Zeichen größer #32 auftritt oder der Anfang des String erreicht ist.
Das Ergebnis der Funktion ist die Länge des neuen Strings S.
| Funktion CleanEndBlanks |
int CleanAllBlanks(LPSTR S)
CleanAllBlanks entfernt aus einem String alle führenden und abschließenden Zeichen, die kleiner oder gleich #32 (Leerzeichen) sind. Die Funktion ruft dazu die Routinen CleanStartBlanks und CleanEndBlanks auf.
Als Funktionsergebnis wird wiederum die Länge des manipulierten Strings geliefert.
| Funktion CleanAllBlanks |
int IntToHex(int B, LPSTR S)
int WordToHex(unsigned int W, LPSTR S)
int LongToHex(DWORD L, LPSTR S)
Die drei verwandten Funktionen konvertieren eine Dezimalzahl in die entsprechende hexadezimale Darstellung.
Wenn eine Darstellung der Form $xxxx oder xxxxh gewünscht sein sollte, kann das Ergebnis der xxxxToHex-Funktionen mittels PascalHex() bzw. CHex() in die entsprechende Form gebracht werden.
| Funktionen IntToHex, WordToHex, LongToHex |
int PascalHex(LPSTR S)
Die Service-Routine PascalHex stellt einem Hexwert das Zeichen $ voran, wobei zusätzlich führende Nullen entfernt werden.
| Funktion PascalHex |
int CHex(LPSTR S)
Die Service-Funktion CHex hängt an einen Hexwert das Zeichen h an.
| Funktion CHex |
int IntToBin (int B, LPSTR S)
int WordToBin(unsigned int W, LPSTR S)
int LongToBin(DWORD L, LPSTR S)
Die drei verwandten Funktionen generieren aus einem Zahlenwert eine binäre Darstellung, die nur die Ziffern 0 und 1 verwendet. Führende Nullen werden nicht unterdrückt.
Das Funktionsergebnis bezeichnet die Länge des resultierenden Strings.
| Funktionen IntToBin, WordToBin, LongToBin |
BOOL BinToInt (LPSTR S, int *nResult)
BOOL BinToWord(LPSTR S, WORD *wResult)
BOOL BinToLong(LPSTR S, DWORD *lResult)
Die drei verwandten Funktionen generieren aus einem binären String, der nur aus 0 und 1 besteht, einen Zahlenwert. Ist der übergebene String länger, als der Zahlentyp erlaubt, verwenden die Funktionen die ersten n Zeichen.
Konnte der String korrekt umgewandelt werden, lautet die Rückgabe FALSE, ansonsten TRUE.
| Funktionen BinToInt, BinToWord, BinToLong |
char Upcase(char c)
char Locase(char c)
Die beiden Funktionen berücksichtigen die deutschen Umlaute korrekt.
| Funktion UpCase, LoCase |
void StrUpCase(LPSTR S)
void StrLoCase(LPSTR S)
Die beiden verwandten Funktionen wenden UpCase bzw. LoCase auf einen kompletten String an.
| Funktionen StrUpCase, StrLoCase |
void FillStr(LPSTR S,
char c, int nLen)
FillStr ist eine schnelle Fill-Routine, die einen String der Länge nLen erzeugt und mit dem Zeichen c auffüllt.
| Funktion FillStr |
void FillStrJustify(LPSTR S,
char c,
int nLen,
int JustFlag)
FillStrJustify baut auf der Routine FillStr auf, die allerdings einen String S, der auch ein Leerstring sein darf, übernimmt. Der String wird auf die Länge nLen gebracht, wobei mit Zeichen c aufgefüllt oder notfalls der überflüssige Teil abgeschnitten wird. Zusätzlich wird der Ergebnisstring gemäß JustFlag ausgerichtet. Mögliche Ausrichtungen sind:
|
Konstante
|
Ausrichtung
|
|
STRLEFT
|
String S nach links ausrichten
|
|
STRCENTER
|
String S im Ergebnisstring zentrieren
|
|
STRRIGHT
|
String S nach rechts ausrichten
|
| Funktionen FillStrJustify |
|
Werden die drei Ausrichtungen auf den String
SPECIAL INTEREST SOFTWARE
angewendet, liefert die Ausgabe bei Füllzeichen „-“ und Länge 30:
SPECIAL INTEREST SOFTWARE-----
--SPECIAL INTEREST SOFTWARE---
-----SPECIAL INTEREST SOFTWARE
| Beispiel |
void StrJustify(LPSTR S,
int nLenL,
int JustFlag)
StrJustify baut auf die Routine FillStrJustify auf. Allerdings wird hier als Füllzeichen stets das Leerzeichen verwendet. Wie bei FillStrJustify wird der Ergebnisstring gemäß JustFlag ausgerichtet.
| Funktion StrJustify |
void GetSoundex(LPSTR Input,
LPSTR Soundex)
GetSoundex generiert aus der Zeichenkette Input einen Soundex-Code, der in Soundex zurückgegeben wird.
Wurde ein leerer String als Parameter übergeben, ist das Funktionsergebnis ein String, der nur aus (4) Nullen besteht.
| Funktion GetSoundex |
|
Der Algorithmus basiert auf 11 Regeln:
- Alle Buchstaben eines Wortes werden in Großbuchstaben umgewandelt.
- Der erste Buchstabe eines Wortes wird unverändert übernommen.
- Die Vokale A, E, I und O sowie die Konsonanten H, W und Y werden bei der Soundex-Generierung nicht berücksichtigt.
- Aufeinanderfolgende gleiche Buchstaben werden als ein Buchstabe aufgefaßt.
- Die Buchstaben B, F, P und V werden als 1 codiert.
- Die Buchstaben C, G, J, K, Q, S, X und Z werden als 2 codiert.
- D und T werden als 3 codiert.
- L wird als 4 codiert.
- M und N werden als 5 codiert.
- R wird als 6 codiert.
- Der sich so ergebende Code muß 4 Zeichen haben. Ist er kürzer, wird er mit NULLen aufgefüllt, ansonsten werden die überzähligen Buchstaben abgeschnitten.
| Vorgehensweise |
|
Name
|
Code
|
Name
|
Code
|
|
Meier
|
M600
|
Meaeir
|
M600
|
|
Mayer
|
M600
|
Maeihr
|
M600
|
|
Meyer
|
M600
|
Myr
|
M600
|
Alle sechs Worte erzeugen ein und denselben Soundex-Code: M600. Soundex-Codes ist daher immer mit Vorsicht zu begegnen.
| Beispiele |
void SwapStr(LPSTR S)
Mit SwapStr lassen sich Strings umdrehen, d. h. das letzte Zeichen wird zum ersten und umgekehrt.
| Funktion SwapStr |
|
Die Funktion SwapStr erzeugt aus der Zeichenkette
INTEREST-Verlag
den String:
galreV-TSERETNI
| Beispiel |
void RotateStrL(LPSTR S,
int num)
void RotateStrR(LPSTR S,
int num)
Diese Funktionen verhalten sich wie die Assembler-Befehle Rotate Left (ROL) und Rotate Right (ROR). Jedes nach links oder rechts hinausgeschobene Zeichen wird am anderen Ende wieder angehängt.
Mit num kann die Anzahl der zu rotierenden Zeichen festgelegt werden.
| Funktionen RotateStrL, RotateStrR |
|
Der Aufruf
RotatStrL('1001111100000', 3) )
erzeugt die Ausgabe
1111100000100
| Beispiel
|