|
|
||
|
|
||
| .. Beispiel: UND / ODER-Maske, toupper() und tolower() | ||
|
|
||
|
Problemstellung
Durch die Benutzung eines Maskenbytes und
den logischen Operationen UND bzw. ODER auf Bits können
ASCII-Codes kleiner Buchstaben, in solche großer
Buchstaben .. und umgekehrt, gewandelt werden.
Aufgabe Schreiben Sie zwei C-Funktion mit den Namen toupper() und tolower(), welche diese Umformung eines Strings ermöglichen Den Funktionen soll jeweils ein nullterminierter String angeboten werden in denen sich beliebige ASCII-Codes befinden können und von denen nur die Buchstaben in der angesprochenen Weise verändert werden. Die Sonderzeichen und Ziffern sollen unverändert im String erhalten bleiben. Die Funktionen sollen die Gesamtzahl der Zeichen in dem übergebenen String zurückgeben. |
||
|
|
||
// masken.cpp
// ------------ Version 21.04.2008
// Model: beliebig
// char: beliebig
// D.Schwarzer, www.GoBlack.de
// Thema: UND- und ODER Maske zur Wandlung von Buchstaben in
// Strings nach grossen / kleinen Buchstaben.
#include <stdio.h> // für printf()
#include <conio.h> // für getch(), wenn benötigt
// toupper()
// Die Funktion wandelt alle kleinen Buchstaben des übergebenen
// Strings in grosse Buchstaben um und gibt die Gesamtzahl der
// Zeichen im String zurück. Die Maximalzahl der Zeichen im String
// beträgt 65534 + Nullterminierung
unsigned toupper(char* string)
{
unsigned m=0;
for(m=0; string[m]!=0; m++){
if(string[m] >='a' && string[m]<='z'){
string[m]=string[m]& 0xDF;
}
}
return (m);
}
// tolower()
// Die Funktion wandelt alle grossen Buchstaben des übergebenen
// Strings in kleine Buchstaben um und gibt die Gesamtzahl der
// Zeichen im String zurück. Die Maximalzahl der Zeichen im String
// beträgt 65534 + Nullterminierung
unsigned tolower(char* string)
{
unsigned m=0;
for(m=0; string[m]!=0; m++){
if(string[m] >='A' && string[m]<='Z'){
string[m]=string[m]| 0x20;
}
}
return(m);
}
// main()
// Testprogramm toupper() und tolower(). Es werden der
// Originalstring dessen Wandlungen und die Gesamtzahl seiner
// Zeichen zum Bildschirm ausgegeben.
// Der zu wandelnde String ist im Programm als Konstante vorgegeben
void main(void)
{
char string[]= "~~! es wurden 23 Fische gefangen !~~";
int m = 0;
printf("\r\n Originalstring: %s", string);
m =toupper(string);
printf("\r\n.. nach toupper(): %s", string);
m =tolower(string);
printf("\r\n.. nach tolower(): %s", string);
printf("\r\n.. Anzahl der Zeichen = ", m);
getch();
}
|
||
| Hinweise In den beiden Funktionen werden sowohl logische Verknüpfungen auf Bits zur Maskenbildung, als auch logische Verknüpfungen auf Variable zur Formulierung von Laufbedingungen benutzt. Die beiden hier vorgestellten Funktionen sind in der statischen C-Bibliothek in ähnlicher Weise bereits vorhanden und tragen hier die Namen strupr() und strlwr(). Im Unterschied zu den obigen Funktionen, geben sie dort die Adresse des ersten Zeichens im String zurück. Weitere Beispiele zur Anwendung von Masken, und zum Schieben von Bits sind im Besonderen unter den Funktionen zu den Zeileneditoren und der String-Zahlwandlung zu finden | ||
|
|
.de