Umlaute einlesen
-
hab die hex codes jetzt in der faq gefunden.... muss ich da noch was beachten wenn ich ein char zeichen mit einer hex zahl vergleiche? wie vergleiche ich überhaupt irgendwas mit hex-zahlen?
-
wie vergleichst du int-zahlen?
-
MasterCounter schrieb:
hab die hex codes jetzt in der faq gefunden.... muss ich da noch was beachten wenn ich ein char zeichen mit einer hex zahl vergleiche? wie vergleiche ich überhaupt irgendwas mit hex-zahlen?
"Hex-Zahlen" sind auch nur Zahlen. Genau genommen ist es einfach nur eine Darstellungsform einer Zahl. Wenn du z. B. die Zahl 10 (dezimal) hast, dann ist das in hexadezimal ein A, in octal aber eine 12. Egal wie du es auch schreibst, der Wert ist immer der selbe ;).
-
das ist schon klar, aber wie unterscheidet er jetzt, ob ich 12 dezimal oder oktal meine
-
MasterCounter schrieb:
das ist schon klar, aber wie unterscheidet er jetzt, ob ich 12 dezimal oder oktal meine
Anhand deiner Formatierung. Mein Beispiel vom vorherigen Post in C.
x = 10; //dezimal y = 0xA; //hexadezimal printf("dezimal: x = %d, y = %d\n", x, y); printf("hexadezimal: x = %x, y = %x\n", x, y);
Wie du siehst, wenn du den Code in ein kleines Programm einbaust, compilierst und ausführst, steht in x und y genau das gleiche drin.
-
Aha, also 0x davor schreiben... hättest du auch gleich sagen können. Naja, es wird, es wird
Aber für mein Problem muss ich mir ja ne eigene Einlesefunktion basteln oder?
-
Aber irgendwie geht das doch nicht, ich dreh noch durch... Wenn ich folgendes Grundgerüst habe:
char ReadChar () { char c; c=getch(); if (c==umlaut) { ... und dann :confused: } return c; }
Was soll ich da dann machen?
-
Du musst natürlich wissen, welchen ASCII-Wert du einliest und welcher es dann eigentlich sein sollte.
Beispiel:
const unsigned char ae_ein = 100; const unsigned char ae_aus = 125; ... //Funktion zum Einlesen char * einlesen(char * eingabe, unsigned int max_lang) { ... unsigned char zeichen; char * pos = eingabe; ... //Zeichen einlesen zeichen = getch(); //Wenn der Umlaut ä eingelesen wird if(zeichen == ae_ein) { //Zeichen umsetzen auf "richtigen" Wert zeichen = ae_aus; } ... //gelesenes Zeichen in den Eingabepuffer schreiben *pos++ = zeichen; ... //Adresse des Eingabepuffers zurückliefern return(eingabe); }
Du könntest die Eingabe aber auch komplett einlesen lassen von fgets() und danach über mit einer Schleife Zeichen für Zeichen durchgehen und schauen, ob da Umlaute drin sind, die umgesetzt werden müssen.
Wie du es machst, bleibt dir überlassen.
-
aha, ok, aber woher weiß ich welchen wert ae_ein hat?
-
MasterCounter schrieb:
aha, ok, aber woher weiß ich welchen wert ae_ein hat?
Mach dir ein kleines Programm, mit dem du ein Zeichen von der Tastatur einliest und lass dir den Wert ausgeben:
... zeichen = getche(); printf(" = %d\n", zeichen); ...
-
oh ne, na klar hab ich hier sogar mal eins gemacht... heut ist echt nicht mein tag...
danke dir, auch wenns ne schwere geburt war
-
Warum funktioniert diese Funktion hier nicht?
char* ConvUmlaute (char *string) { int i=0; int len=0; int ae_ein=-124; int oe_ein=-108; int ue_ein=-127; int AE_ein=-114; int OE_ein=-103; int UE_ein=-102; int ss_ein=-31; unsigned char ae_aus=132; unsigned char oe_aus=148; unsigned char ue_aus=129; unsigned char AE_aus=142; unsigned char OE_aus=153; unsigned char UE_aus=154; unsigned char ss_aus=225; len=strlen(string); i=0; while (i<=len) { if (string[i]==ae_ein) string[i]=(char)ae_aus; else if (string[i]==ue_ein) string[i]=(char)ue_aus; else if (string[i]==oe_ein) string[i]=(char)oe_aus; else if (string[i]==AE_ein) string[i]=(char)AE_aus; else if (string[i]==UE_ein) string[i]=(char)UE_aus; else if (string[i]==OE_ein) string[i]=(char)OE_aus; else if (string[i]==ss_ein) string[i]=(char)ss_aus; i++; } return string; }
-
Ganz einfach. Du machst folgendes:
... if(string[i] == 'a') { string[i] = 'a'; } ...
Vielleicht verstehst du besser was ich meine, wenn du einfach mal nach deinen *_ein und *_aus mal folgendes aufrufst:
printf("%d => %d\n", ae_ein, ae_aus);
Du solltest die *_ein und *_aus übrigens besser als Konstanten definieren. (Also ein const davor schreiben oder sie als Präprozessormakros definieren.)
-
du meinst
printf ("%c => %c",ae_ein,ae_aus);
ich habs gemerkt, aber was muss ich ändern, das ist echt ein witz, aber ich steh im Moment echt irgendwie total auf der Leitung...
-
Ich packs echt nicht...
-
immer noch nicht...
-
ach komm, AJ jetzt sags mir halt, ich bin ja praktisch dein Nachfoger, weil meine Initialien sind AK
-
ach komm, AJ jetzt sags mir halt, ich bin ja praktisch dein Nachfoger, weil meine Initialien sind AK
EDIT: Sorry wegen dem Doppelposting Firefox hat gesponnen...
Ach nein, der IE hat ihn abgelenkt
-
wie wärs mit %d???
-
@MasterCounter
Na wenn ae_ein und ae_aus den gleichen Wert haben, dann änderst du nichts. Du musst rausbekommen welchen Wert du für ä einliest und welchen Wert du ausgeben musst, damit ein ä erscheint (und das gleiche bei den anderen Umlauten).Dazu kannst du dir übrigens wieder ein Programm schreiben. Einfach eine Schleife von 0 weg hochzählen lassen bis 255 (mehr hat hald ein char nicht ;)) und den %c und das %d dazu ausgeben.