000
26.01.2005, 11:28 Uhr
Gölti
|
Moin! Wir haben hier ein Problem mit unserem Programm! Das Programm soll zwei Zeichenketten miteinander vergleichen(wie im Duden) und dann per Ausgabe zeigen, welches Wort vor dem anderen steht oder ob gar beide Wörter gleich sind! Hier mein genaues Prob.: Und zwar soll ß zu ss werden, allerdings funktioniert dies nicht wirklich! Als Beispiel, wenn man Maße und Masse eingibt, soll dies als gleiches Wort ausgegeben werden, da ja Maße zu Masse werden soll!! Außerdem passt auch dies nicht: Masse(String1) und Massegläubiger(String2) soll verglichen werden! Und das Prog. gibt aus das String2 vor String1 steht! Ist aber auch falsch, da einmal nach dem e nichts kommt und dann einmal ein g. Aber warum er nicht weiter vergleicht oder was er vergleicht hab ich keine Ahnung. Und noch eins: Kann man das Problem mit der ASCII Tabelle und den "magischen Zahlen" noch anders lösen?! Das man statt z.b. -114 wird zu A (siehe Umlaute ersetzen) einfach schreibt Ä wird zu A?!?!
Hier der Programmcode:
Code: |
#include <iostream.h> #include <conio.h> #include <ctype.h>
/* Umlaute laut ASCII Tabelle 'Ä' ASCII Code: -114 'Ö' ASCII Code: -103 'Ü' ASCII Code: -102 'ä' ASCII Code: -124 'ö' ASCII Code: -108 'ü' ASCII Code: -127 'ß' ASCII Code: -31 */
void machUmlauteWeg(char *mitUml, char *ohneUml) { while (*mitUml!=0) {
// Den aktuellen Buchstaben des Wortes mitUmlauten ansehen: switch (*mitUml) {
// Umlaute ersetzen case -114: *ohneUml = 'A'; break; case -103: *ohneUml = 'O'; break; case -102: *ohneUml = 'U'; break; case -124: *ohneUml = 'a'; break; case -108: *ohneUml = 'o'; break; case -127: *ohneUml = 'u'; break; case -31: *ohneUml = 's'; ohneUml++; *ohneUml = 's'; break;
// Wenn kein Umlaut vorhanden ist, wird der Buchstabe einfach übernommen default: *ohneUml = *mitUml; }
// Der nächste Buchstabe wird überprüft mitUml++; ohneUml++; } *ohneUml=0; }
int compareStr(char *a, char *b){ while (*a!=0 && *b!=0) { // Vergleich if (*a==0) return -1; if (*b==0) return 1; char ca = tolower(*a); // tolower, wandelt Großbuchstaben in Kleinbuchstaben um char cb = tolower(*b); if (ca<cb) return 1; if (ca>cb) return -1; a++; b++; } // Bis hierhin sind beide Zeichenketten gleich, allerdings muss (wenn nötig) noch das Ende des einen Wortes überprüft werden int lenA=strlen(a);int lenB=strlen(b); if(a>b) return -1; else if(a<b) return 1; else return 0; // Beide Zeichenketten sind gleich
} int main(void) { const int elemente = 50; char str1[elemente]; char str2[elemente];
cout << "\nProgramm zur Anordnung der Woerter";
cout << "\n\nBitte geben Sie die erste Zeichenkette ein (max. 50 Zeichen): "; cin.getline(str1, elemente); cout << endl;
// An dieser Stelle werden die Umlaute zu normalen Buchstaben gewandelt char str1ohneUmlaute[elemente] = { 0 }; machUmlauteWeg(str1, str1ohneUmlaute); cout << "\nDie erste Zeichenkette ohne Umlaute ist: " << str1ohneUmlaute << endl;
cout << "\nBitte geben Sie die erste Zeichenkette ein (max. 50 Zeichen): "; cin.getline(str2, elemente); cout << endl;
// An dieser Stelle werden die Umlaute zu normalen Buchstaben gewandelt char str2ohneUmlaute[elemente] = { 0 }; machUmlauteWeg(str2, str2ohneUmlaute); cout << "\nDie zweite Zeichenkette ohne Umlaute ist: " << str2ohneUmlaute << endl;
int ergebnis = compareStr(str1ohneUmlaute, str2ohneUmlaute);
if(ergebnis == 1) { cout << endl; cout << "Wert 1" << endl; cout << "String 1 ist im Duden vor String 2!" << endl; } else if(ergebnis == 0) { cout << endl; cout << "Wert 0" << endl; cout << "Die beiden Zeichenketten sind identisch!" << endl; } else if(ergebnis == -1) { cout << endl; cout << "Wert -1" << endl; cout << "String 2 ist im Duden vor String 1!" << endl; }
getch(); return 1; }
|
So ich hoffe ihr könnt mir BITTE BITTE möglichst schnell helfen, ist echt dringend!!! DANKE im Vorraus! MfG euer Lemony Snicket (Kumpel vom Gölti) |