KiLLa-T - 32
Champion
(offline)
Dabei seit 06.2007
4586
Beiträge
|
Geschrieben am: 16.03.2013 um 18:38 Uhr
Zuletzt editiert am: 16.03.2013 um 18:51 Uhr
|
|
Hi,
will einen kleinen Vokabeltrainer Deutsch<->Französisch in C++ schreiben, habe jedoch das Problem die Sonderzeichen é,è,ê, ... zu überprüfen.
habe z. B. ein char array mit Inhalt "frère"
Wenn ich dann mit cin.getline(...) einlesen und mir das eingelesene ausgebe, dann passt das auch.
Der Buchstabe è im Array array wird jedoch in ein anderes Symbol "umgewandelt", sodass ich nicht vergleichen kann mit strstr(...)
|
|
le_mon - 31
Experte
(offline)
Dabei seit 02.2011
1771
Beiträge
|
Geschrieben am: 16.03.2013 um 19:16 Uhr
|
|
ohne mich jetzt mit C++ oder Programmierung im Allgeinen groß auszukennen .... Ist es dabei wichtig, auf die Zeichenkodierung zu achten? UTF-8, etc.
Ich hatte mit Datenbanken, php und JS oft das Problem, dass die Zeichenkodierung nicht immer einheitlich war und mir deshalb oft was durcheinander kam, unter anderem auch bei einem Vokabeltrainer auf php-Basis :)
|
|
KiLLa-T - 32
Champion
(offline)
Dabei seit 06.2007
4586
Beiträge
|
Geschrieben am: 16.03.2013 um 19:31 Uhr
|
|
Zitat von le_mon: Ist es dabei wichtig, auf die Zeichenkodierung zu achten?
Denke schon ... ?
|
|
le_mon - 31
Experte
(offline)
Dabei seit 02.2011
1771
Beiträge
|
Geschrieben am: 16.03.2013 um 19:35 Uhr
|
|
jagut, dann schaust halt nochmal nach ob damit alles in Ordnung ist :)
|
|
KiLLa-T - 32
Champion
(offline)
Dabei seit 06.2007
4586
Beiträge
|
Geschrieben am: 16.03.2013 um 19:46 Uhr
|
|
Zitat:
char franz[50];
char deutsch[50];
strcpy(franz,"une filière");
cin.getline(deutsch,50);
system("cls");
cout<<franz<<endl<<endl;
cout<<deutsch<<endl<<endl;
In franz steht jetzt: une fili(komisches Zeichen)re
In deutsch steht jetzt: une filière
--> Ich kann die beiden nicht vergleichen, so lange in "franz" das komische Zeichen anstatt è steht.
|
|
BAsh23 - 36
Fortgeschrittener
(offline)
Dabei seit 04.2011
34
Beiträge
|
Geschrieben am: 16.03.2013 um 21:02 Uhr
|
|
Das scheint vermutlich nen Windows Problem zu sein , da wohl die cmd.exe bei UTF -8 rumnörgelt unter ubutu (bash) läuft dein program wie es sollte
|
|
KiLLa-T - 32
Champion
(offline)
Dabei seit 06.2007
4586
Beiträge
|
Geschrieben am: 16.03.2013 um 21:37 Uhr
|
|
hmm .. ok .. gibts ne Möglichkeit das zu umgehen?
|
|
cyberfork - 37
Fortgeschrittener
(offline)
Dabei seit 05.2012
42
Beiträge
|
Geschrieben am: 17.03.2013 um 01:46 Uhr
|
|
Versuchs mal damit
stackoverflow
|
|
Auchenai - 33
Fortgeschrittener
(offline)
Dabei seit 05.2012
49
Beiträge
|
Geschrieben am: 17.03.2013 um 02:32 Uhr
|
|
Ist zwar ne blöde Methode, aber fang das Wort doch einfach mit dem komischen Symbol ab und mit ner if-Abfrage änderst du es manuell um und vergleichst es dann.
|
|
KiLLa-T - 32
Champion
(offline)
Dabei seit 06.2007
4586
Beiträge
|
Geschrieben am: 17.03.2013 um 12:30 Uhr
Zuletzt editiert am: 17.03.2013 um 12:30 Uhr
|
|
Zitat von Auchenai: Ist zwar ne blöde Methode, aber fang das Wort doch einfach mit dem komischen Symbol ab und mit ner if-Abfrage änderst du es manuell um und vergleichst es dann.
Wie soll das gehen?
Wenn ich das Symbol gefunden hab und dann schreib:
if(array[i]=='das Symbol')
array[i]='è';
Dann steht das è ja wieder nicht drin, sondern nur das komische Symbol.
|
|
cyberfork - 37
Fortgeschrittener
(offline)
Dabei seit 05.2012
42
Beiträge
|
Geschrieben am: 17.03.2013 um 13:19 Uhr
Zuletzt editiert am: 17.03.2013 um 13:22 Uhr
|
|
Zitat von KiLLa-T: Zitat von Auchenai: Ist zwar ne blöde Methode, aber fang das Wort doch einfach mit dem komischen Symbol ab und mit ner if-Abfrage änderst du es manuell um und vergleichst es dann.
Wie soll das gehen?
Wenn ich das Symbol gefunden hab und dann schreib:
if(array[i]=='das Symbol')
array[i]='è';
Dann steht das è ja wieder nicht drin, sondern nur das komische Symbol.
Das macht keinen Sinn.
Es gibt ein paar möglichkeiten.
1. Du passt die Codepage deines Terminals an.
2. Du stellst deinen Codeeditor auf die gleiche Codepage/Zeichensatz ein.
3. Du machst das ganze umständlich und codierst die französischen Worte im
im entsprechenden Zeichensatz in deinen Sourcecode ein.
Das folgende Beispiel sollte funktionieren ( konnte dies nur unter Linux testen...aber mit der
Codepage 850)
Zitat: char franz[50];
char deutsch[50];
char t[]={0x75,0x6e,0x065,0x20,0x66,0x69,0x6c,0x69,0x8a,0x72,0x65,0x00};
strcpy(franz,t);
cin.getline(deutsch,50);
system("cls");
cout<<franz<<endl<<endl;
cout<<deutsch<<endl<<endl;
Das obige soll nur als Beispiel dienen.
Hier wird é mit einem Byte ( Byte mit dem Wert 0x8a dargestellt).
Betrachte ich die Sourcedatei mit einem Hexeditor kann ich sehen
das für das Zeichen 2 Byte verwendet werden (0xc3 und 0xa8).
Info zum Zeichen in UTF8.
Dort findest du notfalls auch weitere infos
edit:
Link zur Codepage bei Wikipedia
|
|
KiLLa-T - 32
Champion
(offline)
Dabei seit 06.2007
4586
Beiträge
|
Geschrieben am: 17.03.2013 um 21:25 Uhr
Zuletzt editiert am: 19.03.2013 um 07:27 Uhr
|
|
Habe das Problem jetzt viel einfacher gelöst.
Habe
Zitat: strcpy(array,"une filière");
geändert zu:
Zitat: strcpy(array,"une fili\212re");
Habe mir mühselig die Zeichen per Ausgabe auf dem Bildschirm herausgesucht, weil ich keine Liste im Internet gefunden habe.
z. B.
Zitat: î - \214
é - \202
ô - \223
...
Danke für eure Hilfe =)
|
|