Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » kleines Problem bei Programmierung eines Duden

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
21.01.2005, 10:39 Uhr
Hans
Library Walker
(Operator)



Zitat von FloSoft:
@Hans: es liegt teilweise auch daran wie man den Quellcode kodiert (also ob er mit ANSI oder OEM/Win-Zeichensatz gespeichert ist). Bei ANSI-kodierung funktioniert imho das tolower/toupper bei mir aufm VC

Hi,
gut, das zu wissen. Mir ist zwar schon aufgefallen, das (eben wegen der unterschiedlichen Zeichensätze) Umlaute anders dargestellt werden, wenn ich einen Quelltext, den ich unter DOS mit Turbo C++ erstellt habe, in einen beliebigen Editor unter Windows geladen hab. Das hat mich bisher aber nur am Rande gestört, weil die Umlaute meisst in Kommentaren standen.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
21.01.2005, 12:56 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



C++:
int mystrcmp(char*a,char*b){
    char c;
    for(;*a&&*b;++a,++b)
        if(c=(tolower(*a)-tolower(*b)))return c;
    return 0;
}


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
24.01.2005, 18:40 Uhr
Gölti



Hallo,

habe immer noch das Problem, dass er das ß nicht richtig in ss umwandelt. Er soll eigentlich, wenn man z.B. Fußball und Fussball eingibt, erkennen dass die beiden Worte gleich sind.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
25.01.2005, 10:05 Uhr
enno-tyrant
Frag nicht!


dann sag deinem programm das er es umwandeln soll:

für:

Ä=\x8E
Ö=\x99
Ü=\x9A
ä=\x84
ö=\x94
ü=\x81
ß=\xE1

also schreibe statt 'stück' -> 'st\x81""ck'
und für 'fußball' -> 'fu\xE1""ball'

das wird richtig erkannt und auch in der cmd richtig wiedergegeben
--
...um etwas zu verstehen muß man wissen wie es funktioniert...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
26.01.2005, 10:08 Uhr
Gölti



Vielleicht weiß ja einer noch was, ich weiß absolut nicht wie das gehen soll, dass er ß richtig in ss umwandelt.

Vielen Dank für eure Hilfe.


Code:
#include <iostream>
#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;
}
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: