Hallo Forenmitglieder, Ich habe eine Frage an euch und bräuchte dabei Hilfe: Ich möchte mit C++ 2008 eine Formsanwendung, welche einen Text einliest, umformt und ausgibt. Das Bild zeigt wie weit ich schon bin :-) Beispiel: Eingabe = Hallo Welt, schön hier! Ausgabe (SOLL) = ['H','a','l','l usw........] auch das Leerzeichen :-) Soweit habe ich es geschafft, bin aber nun am Enden mit meinem Latein, denke es ist aber kein großer Schritt mehr..oder? ***CODE**************** private void formatieren(object sender, EventArgs e) { string eingabe = textBox1.Text; //einlesen der Textbox1 = Eingabefenster string eingabeform = eingabe.Substring(0, 1) + "','" + eingabe.Substring(1, 1) + "','" + eingabe.Substring(2, 1) + "','" + eingabe.Substring(3, 1) + "','" + eingabe.Substring(4, 1) + "',0}"; textBox2.Text = eingabeform; //Text von Textbox1 ausgeben, ohne Formatänderung } ********************** Würde gerne Texte bis zu, ich sag mal 80 Zeichen, so umformen. Danke für jede Hilfe!!
hm.. auf ein "Ohje.." wollte ich nicht hinaus :-( Hab ich was falsch gemacht/angefangen? Bin ich auf einem falschen Weg für mein Ergebnis?
Stringer schrieb: > C++ 2008 Das Gefriemel sieht er nach C# und Konsorten aus, irre ich mich? > Soweit habe ich es geschafft, bin aber nun am Enden mit meinem Latein, > denke es ist aber kein großer Schritt mehr..oder? Doch, ein ganz Großer. Programmieranfänger? Merkt man (nicht übel nehmen). Du solltest ein gutes Buch zum Thema kaufen und durcharbeiten, im konkreten Fall heißt das Zauberwort "Schleife". Da mir gerade langweilig war eine Q&D-Lösung in reinem C, Sicherheitsmaßnahmen gegen Bereichsüberschreitungen usw. musst du selber einbauen. Scheint zu funktionieren, trotzdem ohne Gewähr und Garantie.
1 | #define MAX_IN 80
|
2 | #define MAX_OUT (MAX_IN*4+2) //keine Ahnung obs passt, hab gerade keine Lust nachzudenken
|
3 | int main(void) |
4 | char in[MAX_IN+1]="testabc123 Leerzeichen"; |
5 | char out[MAX_OUT+1]; |
6 | uint8_t i; |
7 | |
8 | strncpy(out,"{'",3); |
9 | for(i=0;i<strlen(in);i++) |
10 | {
|
11 | strncat(out,in+i,1); |
12 | if(i!=strlen(in)-1) |
13 | strncat(out,"','",4); |
14 | }
|
15 | strncat(out,"'}",3); |
16 | printf("%s\n",out); |
17 | getch(); |
18 | return 0; |
19 | }
|
Stringer schrieb: > hm.. auf ein "Ohje.." wollte ich nicht hinaus :-( > Hab ich was falsch gemacht/angefangen? Bin ich auf einem falschen Weg > für mein Ergebnis? Das Ohje bezog sich wahrscheinlich auf deine Kentnisse > Würde gerne Texte bis zu, ich sag mal 80 Zeichen, so umformen. Du kannst natürlich dieses SChema genau so weitertreiben (solltest dir aber überlegen, wie du es hinkriegst, dass auch nur tatsächlich benutzte Zeichen aus dem Eingabestring kommen, oder du kannst beobachten, dass sich dein Ergebnis mit etwas umformatieren so zusammensetzt string eingabeform = eingabe.Substring(0, 1) + "','" + eingabe.Substring(1, 1) + "','" + eingabe.Substring(2, 1) + "','" + eingabe.Substring(3, 1) + "','" + eingabe.Substring(4, 1) + "',0}"; und da nach einem Schema suchen. Das einzige was sich (in erster Näherung) ändert ist die erste Zahl beim Substring. Und diese Zahl läuft von 0 weg bis hoch zu der Anzahl der Zeichen im eingabe String. Wenn das mal nicht ein deutlicher Hinweis für den Einsatz einer for-Schleife ist :-)
Wenn Modulo Eins (jedes 2.Zeichen), füge über .insert() eine gewisse Zeichenfolge ein und das solange bis der String zu Ende ist string.length() http://msdn.microsoft.com/de-de/librarysystem.string.insert%28v=vs.95%29.aspx http://msdn.microsoft.com/de-de/library/system.string.length.aspx
erstmal danke für die Antworten:-) Karl Heinz Buchegger schrieb: > und da nach einem Schema suchen. > Das einzige was sich (in erster Näherung) ändert ist die erste Zahl beim > Substring. Und diese Zahl läuft von 0 weg bis hoch zu der Anzahl der > Zeichen im eingabe String. Wenn das mal nicht ein deutlicher Hinweis für > den Einsatz einer for-Schleife ist :-) Ja soweit habe ich das nun verstanden. Ich nehme also anstatt der festen Zahlen, den Wert der Stringlänge. Und mache das ganze so oft, wie der eingelesene String lang ist ?! ************ string eingabe = textBox1.Text; int l = eingabe.Length; for (int i = 0; i < l ; i++) { string eingabeform = eingabe.Substring(l, 1) + "','"; } *********** jetzt fehlt mir wie ich das nun zusammensetzte am Ende.... wenn ich "eingabeform" ausgeben möchte, sagt er dass es nicht geht, da es nicht im aktuellen Kontext verwendet wird?? Weil es in der for-Schleife ist???
Dann definiere die Variable mal auserhalb der For-Schleife. Ansonsten empfielt sich Google. Wenn Du "String formatieren C#" oder ähnliches eingibst findest Du einiges. Wie z.B. die Concatenation-Funktion: http://msdn.microsoft.com/de-de/library/ms228504.aspx
Nur mal am Rande bemerkt: C und C++ können Strings (nicht anderes sind char-Arrays) auch direkt mit Stringkonstanten initialisieren. Ob man nun
1 | char text[] = { 'H', 'a', 'l', 'l', 'o', 0 }; |
oder
1 | char text[] = "Hallo"; |
schreibt, ist egal, das Ergebnis ist dasselbe. Besser lesen aber kann man eindeutig die zweite Variante. Daher erscheint mir der Aufwand, aus einer Zeichenkette obige Darstellungsform zu erzeugen, recht ... sinnarm. Was ist der Hintergrund des ganzen, wofür soll das gut sein?
Hi, danke ihr habt mir mit euren Anregungen sehr geholfen. Ich habe es hinbekommen und möchte hier natürlich meine Lösung auch präsentieren, damit auch andere etwas davon haben: ********** for (int i = 1; i < l; i++) { eingabeform = eingabe.Insert(i, "','"); eingabe = eingabeform; l = l + 3; i = i + 3; } **************** So wird aus Hallo -> H','a','l','l','o Bestimmt kein sauberer Stil wie ich es programmiert habe, aber es erfüllt seinen Zweck :-)
1 | string s = "Hallo"; |
2 | string result = string.Empty; |
3 | foreach (char c in s.ToCharArray()) result += string.Format("'{0}", c); |
4 | result += "'"; |
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.