Zeichenbereich eingrenzen
-
hi,
ich möchte eine if-bedingung formulieren:
wenn puffer[i] ein zeichen von a-z oder A-Z ist, soll ein '_' ausgegeben werden.
aber wie formuliere ich das "a-z"? ich habe es so probiert:if ((puffer[i]=='a-z')||(puffer[i]=='A-Z')) printf ("_");allerdings scheint der compiler das so nicht zu kapiern..?
hoffe ihr könnt mir helfenmfg feo
-
Von „kapieren“ kann hier keine Rede sein, weil Du dem Compiler einfach was falsches sagst. Der rät ja nicht. Sondern er macht genau, was man ihm sagt – solange man dabei die von ihm verstandene Sprache spricht. => C++
Und das ist nunmal kein C++.
char c = puffer[i]; if (c => 'a' and c <= 'z' or c >= 'A' and <= 'Z') cout << '_';… das ginge.
-
Ich glaube nicht, dass der kompiler da was nicht kapiert.

Wenn du mal überlegst, dann machst du ja einen string mit 'a-z' und das kann er gar nicht richtig auswerten. Eher so:
if (((puffer[i]>= 'a' && puffer[i] <= 'z') || (puffer[i] >= 'A' && puffer[i] <= 'Z'))) printf ("_");EDIT:
Nein, 4 Sekunden zu spät..

-
mh ja war nur bissl umgangssprachlich.. dass der compiler einfach nur das macht was ich ihm sage war mir auch klar +g+ denkt ja nisch..
wusste nicht, dass man das so formulieren kann, weil ich nicht dachte, dass zB c als "größer b" betrachtet wird. hab allerdings eben was übern ASCII-code gelesn, dann macht das sinn

danke mfg
-
Hmm naja liegt einfach daran, dass jedem Zeichen eine Zahl zugewiesen ist ... guck dir ne ASCII-Tabelle an, dann siehst de es.
-
Gibt es in C++ keine Zeichenklassen? Wie sie zb. in Perl, RegExp ... verwendet werden.
[0-9]
Eventuell in der STL?!
Diese Klassen können, je nach dem, sehr sinnvoll sein. Wenn es nur um [a-z] geht ist das nicht nötig. Bei mehreren Zeichen und gerade bei verschiedenen ASCII-Tabellen (Systemabhängig) wird das ganze schon schwieriger.Gruß.
-
hm, mir fällt gerade auf, dass den OP noch niemand darauf hingewiesen hat, dass
std::isalphavielleicht genau die funktionalität bietet, die er sucht.
-
hornochs schrieb:
Gibt es in C++ keine Zeichenklassen? Wie sie zb. in Perl, RegExp ... verwendet werden.
Du verwechselst hier was. Auch Perl hat keine Zeichenklassen, Perl hat lediglich RegExps, welche wiederum über Zeichenklassen verfügen. Wenn Du reguläre Ausdrücke in C++ einsetzen willst, kannst Du das tun (std::tr1::regex) und hast dann dort auch Zeichenklassen.
… alternativ ließen sich Zeichenklassen natürlich auch direkt in C++ codieren, obwohl das wahrscheinlich nicht das ist, was Du meintest. In Boost gibt's mehrere Implementierungen davon.
-
queer_boy schrieb:
hm, mir fällt gerade auf, dass den OP noch niemand darauf hingewiesen hat, dass
std::isalphavielleicht genau die funktionalität bietet, die er sucht.Wobei man den OP auch darauf hinweisen sollte dass isalpha u.U. für deutlich mehr als nur a-z true zurückliefert (sch**** locales).
-
Gut zu wissen. Kein aktuelles Problem, aber brauchen kann man das irgendwann mal.
Und ja, es ist RegEx, habe das aber in der Regel nur mit Perl verwendet.
Danke.
PS: Es selber zu implementieren dürfte in Einzelfällen und je nach Problemstellung nicht wirklich allzu schwer sein, denke ich mir.