Hallihallo, ich habe keine Ahnung ob der Titel überhaupt stimmt. Sorry im voraus aber ich möchte gerne folgenes machen. Gibt es eine Möglichkeit sich in C selber eine Art Typ zu definieren den man dann per ++ und -- durchrollen kann? Ich versuche es mal zu erklären was ich möchte. myalphas A,B,C,K,L,M,O,P myalphas actAlpha; Bei Inhalt C und anschließendem ++ soll es K sein. Bei Inhalt P und anschließendem ++ soll es A sein. Ich möchte gerne bei einer Eingabe einen Zeichenbereich definieren können und den mit ++ und -- durchgehen und nur die definierten Zeichen sollen angezeigt werden. Also zB alle Buchstaben und das Leerzeichen: ASCII 0x65 - 0x90 A - Z ASCII 0x20 SPACE Im Moment mache ich es mit einem ><= Vergleich, ist aber nicht so schön weil ich die gültigen Zeichen am liebsten zur Laufzeit unterschiedlich bestimmen möchte. Für jeden Tip dankbar, MfG AVRli...
in C nicht, in C++ ja struct Alpha { Alpha() : x(&alphas[0]) {} static const char alphas[10]; const char * x; // in postfix form char operator ++(int) { char tmp; .... return tmp; } char operator --(int) { char tmp; .... return tmp; } operator char() { return *x; } }; const char Alpha::alphas="0123456789"; Alpha a; char c = a; // konvertierungsoperator char next = a++; // postfix operator letzendlich ist es syntax sugar ;) klar geht es in C, nur anders enum direction {UP, DOWN}; char alpha(enum direction dir) { char static alphas = ""; char static * last = &alphas[0]; if(dir == UP) { ... return ... } else { ... return ... } return '?'; // default char } grüsse, daniel
Auch wenn du am Ende in C++ sowas wie actAlpha++ oder actAlpha-- schreiben kannst, irgendwo in der Klasse actAlpha musst du in guter alter Handarbeit ausprogrammieren, was dann geschehen soll. Schreib dir in c einen Satz Funktionen, char getArrayChar(), char getArrayCharAndInc() und char getArrayCharAndDec(), die auf einem (statisch globalen) char-Array arbeiten, und dir daraus deine gewünschten Buchstaben liefern. Dazu eine Funktion, mit der du Buchstaben in das Array eintragen kannst, und wenn nötig, auch eine zum löschen. Etwas Verwaltungskram gehört dazu, (wieviel Zeichen sind im Array, aktuelle Zeichenposition, etc.), und fertig. Vom Programmieraufwand ist das identisch zu C++. Anstelle von c = actAlpha++; heisst das dann zwar c= getArrayCharAndInc(); aber damit kann man doch leben. Oliver
Moin, hä? Kannst Du nicht einfach ein Array definieren in dem Deine Zeichenfolge "A,B,C,K,L,M,O,P" als einzelde Elemente drin stehen? > Ich möchte gerne bei einer Eingabe einen Zeichenbereich definieren > können und den mit ++ und -- durchgehen und nur die definierten Zeichen > sollen angezeigt werden. > > Also zB alle Buchstaben und das Leerzeichen: > ASCII 0x65 - 0x90 A - Z > ASCII 0x20 SPACE > > Im Moment mache ich es mit einem ><= Vergleich, ist aber nicht so schön > weil ich die gültigen Zeichen am liebsten zur Laufzeit unterschiedlich > bestimmen möchte. Du kannst dann mit foo[0] auf das A und mit foo[1] auf das B usw. zugreifen. Dein ++ und -- geht damit auch und Du kannst die Werte im Array zur Laufzeit ändern ... Gruß Andreas
Musst nur aufpassen, weils am Ende nicht rundrollt. Beim letzten Element landet dann "a++" in der Wildnis.
Hallo zusammen, sorry für die späte Antwort aber ich hatte vorher keine Zeit. :-( Also die ganzen Lösungen habe ich soweit verstanden doch da denke ich ja fast das meine Lösung dann die "einfachere" und "Platz sparendere" ist.
1 | char get_next_char(char value) { |
2 | // 32 SPACE
|
3 | // 44 , (Komma) noch nicht bei
|
4 | // 48..57 0 - 9
|
5 | // 65..90 A - Z
|
6 | if (value == 0) return 32; |
7 | else
|
8 | if (value == 32) return 48; |
9 | else
|
10 | if (value == 57) return 65; |
11 | else
|
12 | if (value == 90) return 32; |
13 | else
|
14 | if ((value >= 48) && (value < 57)) return value+1; |
15 | else
|
16 | if ((value >= 65) && (value < 90)) return value+1; |
17 | return 0; |
18 | }
|
für Next Char mache ich es so, dann gibt es noch eine Funktion für Prev Char. Nun habe ich bemerkt das ich gelegendlich das Komma noch brauchen werde. Vielleicht geht's noch eleganter? Bei der Array Variante muß man sich ja immer jedes Zeichen in den RAM packen, ist das nicht verschwendung? Gruß AVRli...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.