Programmieren mit C++

Code-Beispiele & Lösungen

Klassen für allgemeine Aufgaben

Stringmanipulation

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





Sachgebiet


© 2009-2012 by Alojado Publishing. Alle Rechte vorbehalten. Ausgewiesene Marken gehören ihren jeweiligen Eigentümern.
Mit der Benutzung dieser Seite erkennen Sie die Nutzungsbedingungen und die Datenschutzerklärung an. Der Betreiber übernimmt keine Haftung für den Inhalt verlinkter externer Internetseiten.
Seite erzeugt 2012-05-20 03:17:33 von textarchiv.alojado.de