Hallo, von Windows her kenne ich die Funktion strupr (macht aus Kleinbuchstaben Grossbuchstaben) Unter Linux finde ich die Funktion nicht in der string.h. Gibt es auf Linux die Funktion auch? Wenn ja, in welchem Header-File? Oder gibt es vielleicht ein gleiche/änliche Funktion die nur anders heisst? Danke schon mal Gruss Wilfrid
Hi, On Thu, 10 Apr 2003, Eberhard Wilfrid ZFF TE-PR wrote:
Gibt es auf Linux die Funktion auch? Wenn ja, in welchem Header-File? Oder gibt es vielleicht ein gleiche/änliche Funktion die nur anders heisst?
Gibt's leider nicht in POSIX oder in GNU Extensions. Ne Library in der
das als C-Funktion drin ist faellt mir jetzt auch nicht ein. In Qt gibt's
QString::upper(), aber das willst du wohl nicht. Also zu Fuss:
#include
Am 10.04.2003 um 10:27:20 schrieb Eberhard Wilfrid ZFF TE-PR:
Hallo,
von Windows her kenne ich die Funktion strupr (macht aus Kleinbuchstaben Grossbuchstaben)
Unter Linux finde ich die Funktion nicht in der string.h.
Gibt es auf Linux die Funktion auch? Wenn ja, in welchem Header-File? Oder gibt es vielleicht ein gleiche/änliche Funktion die nur anders heisst?
Eine gute Moeglichkeit bieten die Bitoperatoren. Bei genauer
bitweiser Betrachtung unterscheidet sich ein Klein von einem
Grossbuchstaben nur am 5. Bit. Eine UND Verknuepfung die das 5. Bit
im Zieloperanden auf Null setzt, macht aus einem Klein- einen
Grossbuchstaben. Der Verknuepfungswert ist in diesem Fall 0xdf (hex)
Ein Beispiel das alle druckbare Zeichen und "deutsche Eigenheiten"
berücksichtigt :
#include
On Sonntag, 13. April 2003 23:19, Oli Weiss wrote:
Am 10.04.2003 um 10:27:20 schrieb Eberhard Wilfrid ZFF TE-PR:
Hallo,
von Windows her kenne ich die Funktion strupr (macht aus Kleinbuchstaben Grossbuchstaben)
Unter Linux finde ich die Funktion nicht in der string.h.
Gibt es auf Linux die Funktion auch? Wenn ja, in welchem Header-File? Oder gibt es vielleicht ein gleiche/änliche Funktion die nur anders heisst?
Eine gute Moeglichkeit bieten die Bitoperatoren. Bei genauer bitweiser Betrachtung unterscheidet sich ein Klein von einem Grossbuchstaben nur am 5. Bit. Eine UND Verknuepfung die das 5. Bit im Zieloperanden auf Null setzt, macht aus einem Klein- einen Grossbuchstaben. Der Verknuepfungswert ist in diesem Fall 0xdf (hex)
Bloß nicht! Das ist KEINE portable Lösung! Damit fällst Du ganz schnell auf
die Schnauze!
Genau aus diesem Grund gibt es die Funktionen der GLIBC, um so etwas portabel
zu lösen.
CU
--
Stefan Hundhammer
Hi, On Sun, 13 Apr 2003, Oli Weiss wrote:
Eine gute Moeglichkeit bieten die Bitoperatoren. Bei genauer bitweiser Betrachtung unterscheidet sich ein Klein von einem Grossbuchstaben nur am 5. Bit. Eine UND Verknuepfung die das 5. Bit im Zieloperanden auf Null setzt, macht aus einem Klein- einen Grossbuchstaben. Der Verknuepfungswert ist in diesem Fall 0xdf (hex)
Arghh. Hoert nicht auf ihn. a) Unportabel und b) nicht mal auf normalen 8Bit-Systemen sprach (i.e. locale) -unabhaengig. Die _einzige_ Moeglichkeit Gross- und Kleinbuchstaben ineinander umzuwandeln ist toupper()/tolower() und darauf aufbauende Funktionen. Ich weiss, es ist zum Teil cool, solche Hacks zu wissen, aber sie richten in den meisten Faellen mehr Schaden als Nutzen an. Als simpler Beweis reicht schon mal, das dein Code das deutsche 'ß' nicht korrekt behandelt (OK, durch Zufall schon, es aendert es naemlich nicht), oder z.B. 'á'. Ciao, Micha.
On Mon, 14 Apr 2003 at 16:10 (+0200), Michael Matz wrote:
On Sun, 13 Apr 2003, Oli Weiss wrote:
Eine gute Moeglichkeit bieten die Bitoperatoren. Bei genauer bitweiser Betrachtung unterscheidet sich ein Klein von einem Grossbuchstaben nur am 5. Bit. Eine UND Verknuepfung die das 5. Bit im Zieloperanden auf Null setzt, macht aus einem Klein- einen Grossbuchstaben. Der Verknuepfungswert ist in diesem Fall 0xdf (hex)
Arghh. Hoert nicht auf ihn. a) Unportabel und b) nicht mal auf normalen 8Bit-Systemen sprach (i.e. locale) -unabhaengig. Die _einzige_ Moeglichkeit Gross- und Kleinbuchstaben ineinander umzuwandeln ist toupper()/tolower() und darauf aufbauende Funktionen.
Ich weiss, es ist zum Teil cool, solche Hacks zu wissen, aber sie richten in den meisten Faellen mehr Schaden als Nutzen an. Als simpler Beweis reicht schon mal, das dein Code das deutsche 'ß' nicht korrekt behandelt (OK, durch Zufall schon, es aendert es naemlich nicht), oder z.B. 'á'.
wobei man hier sagen muss dass das Verhalten beim `ß' auch nicht korrekt ist. Richtig waere nicht es einfach zu lassen sondern ein SS daraus zu machen, was zwar bei einzelnen Zeichen nicht geht aber bei Strings durchaus moeglich waere, in der Tat wird es bei Java so gemacht. Sicherlich ist das bei normalen Programmen `nicht so schlimm', aber etwa bei einer Textverarbeitung haette man dann doch gerne ein korrektes (was in der deutschen Sprache korrekt ist steht im Duden und wird nicht in POSIX etc. definiert) Verhalten. Gruß, Bernhard -- _________ http://www.bwalle.de _________________________________________________ Der Trick in dieser Welt ist herauszufinden, was man gerne tut, und dann noch jemanden zu finden, der einen dafür bezahlt. -- (unbekannt)
Hi, On Mon, 14 Apr 2003, Bernhard Walle wrote:
wobei man hier sagen muss dass das Verhalten beim `ß' auch nicht korrekt ist. Richtig waere nicht es einfach zu lassen sondern ein SS daraus zu machen, was zwar bei einzelnen Zeichen nicht geht aber bei Strings durchaus moeglich waere, in der Tat wird es bei Java so gemacht.
Weil's in Java richtige Strings gibt. Bei C gibt's bloss 0-terminierte char Arrays ;-) Aber ja, eigentlich hast du recht.
Sicherlich ist das bei normalen Programmen `nicht so schlimm', aber etwa bei einer Textverarbeitung
Und sowas wuerde man eben in einer Sprache schreiben, die entweder Strings hat, oder sich sowas selbst biegen ;) Ciao, Micha.
Hi, On Tue, 15 Apr 2003 at 16:10 (+0200), Michael Matz wrote:
On Mon, 14 Apr 2003, Bernhard Walle wrote:
wobei man hier sagen muss dass das Verhalten beim `ß' auch nicht korrekt ist. Richtig waere nicht es einfach zu lassen sondern ein SS daraus zu machen, was zwar bei einzelnen Zeichen nicht geht aber bei Strings durchaus moeglich waere, in der Tat wird es bei Java so gemacht.
Weil's in Java richtige Strings gibt. Bei C gibt's bloss 0-terminierte char Arrays ;-) Aber ja, eigentlich hast du recht.
Klar, aber C++ hat eine string-Klasse (aber meines Wissens gar keine Methode die eine solche Umwandlung vornehmen koennte). Es waere also in C++ genauso wie in Java moeglich.
Sicherlich ist das bei normalen Programmen `nicht so schlimm', aber etwa bei einer Textverarbeitung
Und sowas wuerde man eben in einer Sprache schreiben, die entweder Strings hat, oder sich sowas selbst biegen ;)
Klar, nur letzteres hat halt Nachteile: - aufwendig, - kein einheitliches Verhalten, - man vergisst es leicht und - man muss die entsprechende Sprache koennen um sowas zu beruecksich- tigen. Ich denke es gibt auch noch andere Sprachen mit solchen Problemen. Wobei man sowieso sagen muss dass das Verhalten in Java auch Nachteile mit sich bringt: - funktioniert nicht bei einzelnen charactern und - bei einer anschliessenden Umwandlung in Kleinschreibung ist das ß verschwunden. Die einzige Alternative waere meiner Meinung nach gewesen fuer das grosse ß in Unicode ein eigenes Zeichen vorzustehen, dass in normalen Fonts wie `SS' aussieht aber ein einzelnes Zeichen darstellt. Ok, ich geb's zu es gibt wichtigere Probleme aber solche Unzulaenglichkeiten nerven mich halt irgendwie. Gruß, Bernhard -- _________ http://www.bwalle.de _________________________________________________ Eine Diktatur ist eine Regierung, bei der man in Gefahr gerät, sitzen zu müssen, wenn man nicht hinter ihr stehen will. -- Stanislaw Jerzy Lec
participants (6)
-
Bernhard Walle
-
Eberhard Wilfrid ZFF TE-PR
-
Michael Matz
-
Oli Weiss
-
Peter Wiersig
-
Stefan Hundhammer