Sonderzeichen abfangen
-
hey... ich google hier schon die ganze zeit rum aber keiner kann mir sagen wie ich sonderzeichen abfangen kann...
also... die konsole soll stringsausgeben, aber die sonderzeichen durch "x" ersetzen... weiß jmd um rat??
-
aja... in c# ging das ungefähr so...
if(char == SYSTEM)
continue;
-
Der kanonische Ansatz wäre es wohl, einen eigenen Streambuffer zu schreiben (bzw. vom Standardbuffer zu erben und nur das ändern was man ändern muss). Dieser fischt dann die gewünschten Zeichen raus und ersetzt sie durch X. Eine sehr ausführliche Anleitung findest du hier:
http://www.angelikalanger.com/Articles/Topics.html#CPP
ich23123 schrieb:
if(char == SYSTEM)
continue;Ja, in der innersten Ausgaberoutine vielleicht, aber garantiert nicht irgendwo so im Programm stehend.
-
Meinst du sowas?
cout << ohne_sonderzeichen ("Das ist ein \a Text mit Beep und \t Tab");
string ohne_sonderzeichen (string text) { int i=0; while (i < text.length() { if (text[i] == '\a' || text[i]=='\t') text[i]='x'; i++; } return text; }
(nicht getestet)
Sorry falls ich das jetzt falsch verstanden habe
-
if( !isalnum( (int) ch ) ) return( 'x' ); else return( ch );
oder
char converter( char ch ) { return( isalnum( (int) ch ) ? ch : 'x' ); }
-
http://www.cplusplus.com/reference/clibrary/cctype/isprint/
/* isprint example */ #include <stdio.h> #include <ctype.h> int main () { int i=0; char str[]="first line \n second line \n"; while (isprint(str[i])) { putchar (str[i]); i++; } return 0; }
-
manni66 schrieb:
http://www.cplusplus.com/reference/clibrary/cctype/isprint/
/* isprint example */ #include <stdio.h> #include <ctype.h> int main () { int i=0; char str[]="first line \n second line \n"; while (isprint(str[i])) { putchar (str[i]); i++; } return 0; }
manni66, deine Antwort fällt unter "schön kopiert, aber dennoch Thema verfehlt"
-
Mit WinApi nehme ich dafür subclassses mit einer eingehängten CALLBACK-Funktion. Damit kann jedes Zeichen sofort während der Eingabe manipuliert oder ignoriert werden. So erlaube ich dem Benutzer als Dezimalzeichen sowohl den Punkt als auch das Komma zu nehmen.
Aber wir sind ja hier bei C++. Da empfiehlt sich ein switch über die eingelesenen ASCII-Werte der Zeichen. Früher unter DOS habe ich eine kleine Assembler-Routine für den Interrupt 21H eingesetzt.