sonderzeichen erkennen?
-
Hallo, wenn ich ein String untersuchen will, ob ein umlaut enthalten ist, wie gehe ich am besten vor?
string test = "Töffel"; (schleife über die länge) { if ( test[i] < 48 && test[i] > 122) ) umlaut++; }irgendwie geht das nicht

-
such Dir aus dem Ansi-Zeichensatz die Nummern für die Umlaute raus und vergleich danach (sofern Du keinen UTF-String untersuchst).
-
das klingt gut,
ö = 214 (ansi )
ich teste ob das (Zeichen > 122) ist.
ja, 214 > 122 somit müsste es doch gefunden werden?
oder muss ich alles in int konvertieren, so vergleichen?
-
Willst Du nur nach deutschen Umlauten vergleichen oder auch nach anderen?
string s("Hallö"); if(s[4] == 246) // 246 = kleines ö cout << "Umlaut gefunden" << endl;brauchst nicht nach int konvertieren.
-
ich will eigentlich alle sonderzeichen finden und in meinem Programm markieren.
also wenn es keie zahl oder buchstabe ist, ist es ein sonderzeichen.
eigentlich im ascii: < 48 && test[i] > 122
ich versuch esmal mit ansi...
thx
-
Hallo, wenn ich ein String untersuchen will, ob ein umlaut enthalten ist, wie gehe ich am besten vor?
also wenn es keie zahl oder buchstabe ist, ist es ein sonderzeichen.
umlaute sind buchstaben. wenn ich jetzt mal so grob überschlage, wir haben ohne umlaute 26 buchstaben und 10 zahlen. addiert sind das circa 36 zeichen.
und ich rechne mal zeichensatz nummer 122 - 48 sind ungefähr mehr als 36. die zeichen tabelle zählt ohne unterbrechung um eins weiter.
schau dir die tabelle besser noch einmal an.
-
btw...
nur so als Anregung, vielleicht is auch die Bedingung im if falsch?
Weil afaik kann ein einzelner Wert nicht gleichzeitig < 48 und > 122 sein.
Von daher wird des eigentlich niemals true.
Könnte sein dass es der Punkt ist, warums nicht geht
Also ich mein jetz grad die Bedingung in deinem ersten Post
-
#include <cctype> #include <iostream> #include <algorithm> using namespace std; bool IsUmlaut(char x){ return !isalnum(x); } int main(int argc, char **argv){ int num = count_if(argv[1], argv[1] + strlen(argv[1]), IsUmlaut); std::cout << "Hat " << num << " nicht alphanumerische Zeichen." << std::endl; };Man sollte dabei beachten das je nach Konsole, Editor oder wie auch immer man Umlaute einfügt, diese anders kodiert sind. Hab zB eine UTF8-Konsole und entsprechend belegen Umlaute ein paar Zeichen mehr.

-
An sowas bin ich auch schonmal gescheitert, war irgendeine Aufgabe aus einem Tutorial oder auch meinem Übungsbuch... egal. Da ging es auch um Sonderzeichen, bzw. Zeichen, die so nicht darstellbar sind, aus dem ASCII Zeichensatz. Wie auch immer man die jetzt auch nennen will...
Es ging um alle Zeichen mit einem Wert kleiner X und alle Zeichen mit einem Wert kleiner Y.Es stimmt schon, was Vorden sagt:
if ( test[i] < 48 && test[i] > 122) ) umlaut++;kann so eigentlich nicht funktionieren, weil die Bedingung ja heisst: "kleiner 48 und größer 122", kann mit einem Zeichen allein nie "true" sein und damit auch nicht den Umlautzähler erhöhen.
Dagegen:
if ( test[i] < 48 || test[i] > 122) ) umlaut++;So sollte es gehen. Wenn das abgefragte Zeichen kleiner 48 oder größer 122 ist, wird der Umlautzähler erhöht.
-
Ich stehe zz vor dem gleichen Problem, und habe deshalb damit angefangen mir ne funktion zu schreiben die einen String überprüft ob er einen umlaut enthält und falls einer exisitiert wird dieser mit dem hexcode des umlauts ausgetauscht.
Die funktion sieht zz so aus, aber es funktioniert nich.. weis einer warum?int StringCheck(string &input) { unsigned int i = 0; size_t sl = input.length(); char temp; for(i; i < sl; i++) { temp = input[i]; if (temp == 'ä') { input[i] = 'a'; //anstatt dem Hexcode lass ich derzeit //nur ein 'a' eintragen, das mit dem //hexcode sollte aber mit dem string //befehl insert kein problem sein } } cout << "-> " << input; return 0; }Eigentlich sollte in dem string danach statt einem ä ein a stehen, das ist aber nicht der fall, die funktion ist zz auch nur für "ä" man muss sie noch erweitern um öüß usw.. aber erstmal sollte das eine hier funktionieren, und das tut es nicht, warum? Ich bin ratlos, ich hab schon alles mögliche versucht
-
Fellhuhn schrieb:
Man sollte dabei beachten das je nach Konsole, Editor oder wie auch immer man Umlaute einfügt, diese anders kodiert sind. Hab zB eine UTF8-Konsole und entsprechend belegen Umlaute ein paar Zeichen mehr.
