Hallo, ich habe gestern bereits einen etwas blöden Thread zu einem Problem mit einem String in einem Array geschrieben. Das Problem sollte ich etwas besser ausführen: Ich habe einen String, der wie foglt aussieht: char string[7] = {"72 abcd"}; Der eigentlich auszuwertende Text ist "abcd" und die Zahl 72 soll als Steuerzeichen verwendet werden. Konkret Gewünscht ist also, dass genau das folgende in dem Array drinsteht: string: [7,2, ,a,b,c,d]; Problem ist nun aber, wenn ich die Zeile char string[7] = {"72 abcd"}; auswerte, dann stehen an den ersten beiden Positionen des Arrays eben nicht die Zahlen 7 und 2, sondern die ASCII-Representative dieser Zahlen... Wie kann ich ein Array also so initialisieren, dass am Anfang Zahlen drin landen und auf den hinteren Plätzen mein String beretis ASCII-codiert? mfg
da gibt es sowas wie isNum. Damit prüfst Du ob Dein Char eine Zahl ist un konvertierst entsprechen.
ASCII schrieb: > Ich habe einen String, der wie foglt aussieht: > > char string[7] = {"72 abcd"}; Das ist dann aber kein String. Der 'String' "72 abcd" ist nämlich 8 Zeichen lang, wenn man das abschliessende \0 Zeichen mitzählt. Und ohne ist das nun mal kein String. Also etwas besser aufpassen! > Der eigentlich auszuwertende Text ist "abcd" und die Zahl 72 soll als > Steuerzeichen verwendet werden. > > Konkret Gewünscht ist also, dass genau das folgende in dem Array > drinsteht: > > string: [7,2, ,a,b,c,d]; Moment. Soll das erste Byte den Wert 7 oder den Wert 72 haben? Der erste zitierte Satz scheint genau letzteres anzudeuten char string[7] = { 72, ' ', 'a', 'b', 'c', 'd', '\0' }; wäre zb eine Möglichkeit. Eine andere wäre es zb. in einer ASCII Tabelle nachzusehen, welches Zeichen den Code 72 hat und den String ganz einfach damit beginnen zu lassen. char string[] = { "H abcd" }; Der ASCII Code von 'H' ist 72.
ASCII schrieb: > char string[7] = {"72 abcd"}; das passt schonmal nicht, dieser String ist 8 Bytes lang (Terminierung) > Wie kann ich ein Array also so initialisieren, dass am Anfang Zahlen > drin landen und auf den hinteren Plätzen mein String beretis > ASCII-codiert? > char string[] = {7,2,' ','a','b','c','d','\0'}; Verdammt zu langsam Karl Heinz Buchegger schrieb: > char string[] = { "H abcd" }; > > Der ASCII Code von 'H' ist 72. Das ist geschickt :D
Stichwort wäre wohl STRUCT und dann ein array aus der Struct machen. Du willst anscheinend einen Interger und eine String haben. Dann würde es sich anbieten auch mit Integer und String zu arbeiten. Ober bekommst Du den String "72 abcd" irgendwie über einen Schnittstelle herein und musst Ihn aufsplitten. ( p.s. Vielleicht doch mal in ein Buch schauen ;-) )
Timmo H. schrieb: >> char string[] = { "H abcd" }; >> >> Der ASCII Code von 'H' ist 72. > > Das ist geschickt :D Und lässt sich noch besser formulieren, wenn man ausnutzt, dass der Compiler einzelne String-Literale die direkt aufeinander folgen, erst mal zusammenhängen muss
1 | #define COMMAND_1 "H" // Code 71
|
2 | |
3 | |
4 | char string[] = COMMAND_1 " abcd"; |
Wobei: Die Variante von "NurEinGast" wäre sowieso IMHO die bessere Alternative. Nur fürchte ich, dass der TO noch nicht soweit ist.
Freunde -lasst den Kollegen "ASCII" erst mal erzählen was er wirklich braucht. Gestern hatten wir auch so einen Thread, wo jemand einen Integer gebraucht hätte ( I/O Port Nummer ) und ihn als String definiert hat und sich gewundert hat, dass er den String nicht einfach so als I/O Port Nummer verwenden kann. Auf den Hinweis mal in ein Buch zu schauen und den Unterschied String/Integer zu lernen, hat der Kollege etwas verschnupft reagiert. Ich muss zugebeben - ich fürchte dass hier ist das gleiche Thema. Also lieber ASCII(Gast). Bitte erzähle uns mal was Du vorhast und was Du brauchst.
char string[7] = {"72 abcd"}; string[0] = string[0]-0x30; string[1] = string[1]-0x30; Wenn : Die Zahl immer zweistellig ist Immer in den ersten 2 Stellen des Strings ist. Die Aktion nur einmal abgearbeitet wird. Aber wie gesagt, ich bezweifle, dass wir das eigentlich wollen.
NurEinGast schrieb: > string[1] = string[1]-0x30; Dann ist aber der String mit Einerstelle '0' nach einem Zeichen zu Ende. (Für die weitere normale Stringverarbeitung)
Wenn in string[1] eine "0" steht, dann hast Du recht, dann ist der String für die weitere normale Stringverarbeitung hier beendet. Ist halt sehr sehr gut zu überlegen, ob man das so tun will. Aber es ist das, was der TO gewollt hat. -- -- Konkret Gewünscht ist also, dass genau das folgende in dem Array -- drinsteht: -- string: [7,2, ,a,b,c,d]; Ich halte es nicht für sinvoll !!!
Kann man das nicht über "fscanf" machen? Etwas = fscanf ( Input , "%2d %c%c%c%c", &DummyNum, &FirstChar, &SecondChar, ...) In dem Bereich gibt's 'ne Menge ähnlicher Funktionen.
amateur schrieb: > Kann man das nicht über "fscanf" machen? Das hängt jetzt alles davon ab, was eigentlich das Ziel ist, bzw. wie dieser gepimpte String verwendet werden soll. Und ich bin da schon auch bei "NurEinGast". Ehe man in diese Richtung weiter geht, sollte man erst mal die Frage stellen: Wie sinnvoll ist es, in den String solche speziellen Codes einzubringen. Das kann durchaus sinnvoll sein, muss es aber nicht. Um das zu entscheiden, muss man mehr über die Aufgabenstellung wissen.
Nun mag er nicht mehr, der ASCII (Gast) Echt blöd, wenn Leute anfangen zu helfen und der Frager taucht einfach ab. Nur weiter so. Irgendwann werden dann einfach alle Anfängerfragen einfach ignoriert werden .... Dabei gab's doch diesesmal sogar ne Copy&Paste Antwort, so dass er nicht selbst denken oder gar lernen musste.
Frank W. schrieb: > Dabei gab's doch diesesmal sogar ne Copy&Paste Antwort, > so dass er nicht selbst denken oder gar lernen musste. Also konnte er die einfach verwenden und brauchte nicht mal Danke zu sagen.
Da war doch mal was... in der Definition der Sprache "C"... oktale Konstanten... char string[7] = {"\007\002 abcd"}; und schon hat er das Gewünschte.
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.