Mehrere Zeichen auf einmal ausgeben
-
moin, ich versuche gerade ein programm zu machen mit 2 edit feldern und 1 button.
wenn man bei edit1 z.b. eine eingibt 1 dann steht in edit2 der buchstabe a
wenn man bei edit1 aber eine 2 eingibt dann steht dort der buchstabe bNun soll folgendes passieren wenn man eingibt 12 dann soll in edit2 stehen ab
Nur dummerweise hab ich 0 Ahnung wie man das machen könnte.
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { String name; name = Edit1->Text; if (name == "1") { Edit2->Text="a"; } if (name == "2") { Edit2->Text="b"; } }
-
Du müßtest beim Eingabetext (name) mit einer For-Schleife jedes Zeichen abfragen und dann den entsprechenden Ergebnistext zusammenbauen (+) und an das Edit übergeben. Hierbei ist zu beachten, daß AnsiString bei 1 anfängt.
-
wie kann man den mit einer schleife einzelne zeichen abfragen ?
-
Hallo
AnsiString ist wie ein übliches Array ansprechbar, und desen Eigenschaft Length gibt dir auch die Anzahl der Buchstaben zurück.
bis bald
akari
-
Indem du zB mit einer for-Schleife die einzelne Zeichen des Edits abklapperst!
Deine Laufvariable muss dann alle Zeichen des Edits durchlaufen. Wieviele das sind, bekommst du mit den String-Methoden heraus.
In der Schleife könntest du zB eine switch-Anweisung nehmen, um den Zahlen Buchstaben zuzuordnen. Nach der switch kannst du dann das neue Zeichen in Edit2 eintragen und die Schleife beginnt von vorn, bis alle Zeichen aus Edit1 abgearbeitet wurden.
Oder du nimmst eine Umrechnung, das wird evtl kürzer... wenn für dich realisierbar.MfG
-
Ein beispiel Code wäre glaub ich er hilfreicher.
hier bin ich bis jetzt aber ka ob der ansatz überhaupt richtig ist^^
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { String user; AnsiString a = "abcdef"; String i; i = Edit1->Text; for (int i=1;i<a.Length();i++) { if (i==2) { Memo1->Lines->Add(a[1]); } if (i==3) { Memo1->Lines->Add(a[2]); } } }
-
Hallo
void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString text = Edit1->Text; for (int lv = 1; lv <= text.Length(); lv++) text[lv] = text[lv] - '1' + 'a'; Edit2->Text = text; }
bis bald
akari
-
Ja, vom Grundgedanken her in Ordnung
^^
Edit: Man akari, manchmal bist du nur am schlaumeiern und gibts bloss bissige Kommentare und Links bzw Hilfehinweise raus und dann das hier... Spielverderber
-
Hallo
Zunächst einmal hat roflcopter ja Eigeninitiative gezeigt, was ich also nicht nur mit den üblichen Verweisen abspeisen will. Und der gezeigte Code macht mir klar das die Richtung schon richtig ist, aber eben der Sinn fürs Zusammenfassen in eine Schleife fehlt. Da bringt es nichts über Prinzipien zu reden, das hätte sonst noch Seitenweise so weitergehen können. Da hilft nur konkreter Code. Ich bin mir sicher das roftcopter auch was draus lernt und nicht nur kopiert.
/Edit : Außerdem fand ich das Vorgehen mit dem switch so... umständlich, da mußte ich einfach im konkreten Code zeigen wie es eleganter geht. Ein Anfänger würde vermutlich gar nicht auf die Idee kommen das es viel einfacher geht.
bis bald
akari
-
Thx funktioniert :>
Aber was genau passiert in dieser Zeile wie könnte man das in Worten sagen ?
text[lv] = text[lv] - '1' + 'a';
-
Ein Zeichen im String ist ein "char". Das ist eigentlich ein Zahlendatentyp. also ein Wert zwischen -127 und 127, bzw. 0 und 255 für "unsigned char". Die Zeichen haben alle eine Zahlendarstellung, kann man in der Zeichentabelle nachschlagen.
'1' = 0x31
'a' = 0x61
Wenn also das Zeichen an einer Stelle den Wert '1' hat, und man davon '1' abzieht und 'a' addiert, kriegt man wieder 'a' raus. Wenn ne '2' drin steht, kommt bei der Rechnung 'a'+1 raus, was 'b' ergibt und so weiter.
-
Hallo
Das ist Rechnen mit ASCII-Codes. Das wird vorausgesetzt wenn man solche Aufgaben lösen soll
Im Grunde wird ausgenutzt das sowohl Buchstaben als auch die Ziffern jeweils aufeinanderfolgende ASCII-Zahlen haben. Für den Fall '3' kann man also mal durchrechnen :
'3' : ASCII-Code 53 - '1' : ASCII-Code von '1' - 51 + 'a' : ASCII-Code von 'a' + 97 = : 99 = : 'c'
bis bald
akari
-
Das mit dem rechnen versteh ich net XD Hab ich noch nie gemacht ^^
-
akari schrieb:
/Edit : Außerdem fand ich das Vorgehen mit dem switch so... umständlich, da mußte ich einfach im konkreten Code zeigen wie es eleganter geht. Ein Anfänger würde vermutlich gar nicht auf die Idee kommen das es viel einfacher geht.
Deswegen schrieb ich ja schon zu Anfang:
Kolumbus schrieb:
Oder du nimmst eine Umrechnung, das wird evtl kürzer... wenn für dich realisierbar.
Allerdings sollte man erstmal die Grundlagen üben (wie ich auch schmerzvoll feststellen musste) und dazu gehören switch-Anweisungen (die ich wenigstens schon aus der µC-programmierung in C kannte).. An seinem Code habe ich halt gesehen, dass er nichtmal mit switch kann - da poste ich ihm nich einfach nen Umrechnungscode...
roflcopter schrieb:
Das mit dem rechnen versteh ich net XD Hab ich noch nie gemacht ^^
@akari: verstehste mich?
akari schrieb:
Zunächst einmal hat roflcopter ja Eigeninitiative gezeigt, was ich also nicht nur mit den üblichen Verweisen abspeisen will. Und der gezeigte Code macht mir klar das die Richtung schon richtig ist, ... Da bringt es nichts über Prinzipien zu reden, das hätte sonst noch Seitenweise so weitergehen können. ...
Da hast du natürlich recht.
Ich hör' jetzt mal auf mit OT... Das Problem ist gelöst und gut!