Umlaute in C zulassen?
Hallo, ich schreibe gerade an einem Programm in dem ich Palindrome(Wörter bzw. Sätze, die von vorne und von hinten gelesen das selbe ergeben zB. Lagerregal, etc.) herausfinden soll. In der Programmiersprache C. Hier ist die Funktion, in der ich den String in Kleinbuchstaben umwandle:
void small(char str[]);
void small(char str[])
{
int i = 0;
int len = 0;
int j = 0;
char sho[200] = {};
len = strlen(str);
//printf("0");
while(str[i] != '\0')
{
// printf("01");
if(((str[i] < 91) && (str[i] > 64)) || (str[i]== 'ä')||(str[i]== 'ö') || (str[i]== 'ü')|| (str[i]== 'ß')) //ob str[i] großbuchstabe ist
{
// printf("2");
str[i] = str[i] + 32;
}
i++;
}//puts(str);
i = 0;
while(str[i] != '\0')
{
// printf("1");
if (((str[i] > 96) && (str[i] < 123))|| (str[i]== 'ä')||(str[i]== 'ö') || (str[i]== 'ü')|| (str[i]== 'ß')) //ob str[i] buchstabe ist
{
sho[j] = str[i];
j++;
}
i++;
}
puts(sho);
strcpy(str, sho);
//puts(str);
}
Mein Problem ist, dass, wenn ich zB Säas eingebe es als Palindrom gewertet wird, weil es das ä nicht zählt. Ich weiß, dass der Rest meines Programmes funktioniert.
Ich hoffe ihr könnt mir da weiterhelfen.
Mit freundlichen Grüßen,
Hallo
1 Antwort
Dein Editor speichert den Quelltext wahrscheinlich in Unicode und der Compiler versucht das auf ASCII runterzubrechen, kann aber logischerweise nicht wissen dass du eine bestimmte Erweiterung davon benutzen willst.
Versuch mal den Quelltext in ISO-8859-1 zu speichern. Das, bzw. Windows Code Page 1251, ist der Zeichensatz mit dem dein Programm später läuft. Oder um diese Encoding-Probleme zu umgehen: verwende nicht den Umlaut im Quelltext sondern den zugehörigen Bytewert. Also str[i]==0xE4 statt str[i]=='ä', usw. Auf https://de.wikipedia.org/wiki/Windows-1252 gibts eine Tabelle
Entweder das, oder du verwendest wchar_t statt char mit den dazugehörigen Funktionen wscanf, wprintf, etc.
Danke für die Antwort ich werden es gleich probieren! :)