Forum: PC-Programmierung winForms C++ auseinandernehmen einer Zahl


von Stefan G. (Firma: BzD) (master23)


Lesenswert?

Hallo zusammen

Ich habe folgendes Problem.

Ich möchte ein Zahl mittels einer textBox einlesen. z.B. die 623 und 
diese dann so trennen, dass ich sie in diesem beispiel in 3 Fenstern 
ausgeben kann also z.B.

label1= 3
label2= 2
label3=6

Ich mach irgend was mit den string konvertierung at()
kann mir jemand erklären wie ich diesen korrekt anwende oder ob das 
Problem auf eine andere Art gelösst werden kann??

Gruss Stefan

von Thomas (Gast)


Lesenswert?

Und du bist dir sicher, dass du die Windows Forms mit C++ benutzt und 
nicht mit C#?

von Stefan G. (Firma: BzD) (master23)


Lesenswert?

Ja wiso? C# werd ich mir dan später mal noch anschauen..

Ich programmiere in Microsoft Visual C++ und erstelle dabei eine Forms 
Anwendung mit welcher quasi drei "Displays" ansteuere, auf jedem Display 
kann nur eine Zahl ausgegeben werden, daher muss ich das ganze 
trennen...

Wie das ganze mit dem Ausgeben funktioniert und wie ich die zahlen 
umwandeln muss damit sie korrekt ausgegeben werden weiss ich nur schaffe 
ich es nicht die zahl in einzelzahlen zu trennen um sie dann weiter zu 
verarbeiten.

Gruss

von Sebastian-L (Gast)


Lesenswert?

Hi, wenn du einen string als ausgangsbasis hast solltest es doch kein 
problem sein die ZEICHEN zu trennen oder?

von Stefan G. (Firma: BzD) (master23)


Lesenswert?

Sollte, nach meinen Forschungen sollte dass Ganze mit der String- 
Methode
at() funktionieren, aber ich bin irgendwie zu dumm diese korrekt 
anzuwenden.
Hasst du ein Beispiel wie man es anwendet?

von Thomas (Gast)


Lesenswert?

Du kannst mit "richtigem" C++ keine WindowsForms benutzen.

Du hast wahrscheinlich Visual Studio Express, das kann C++/CLI. Das ist 
ein zwischending von C++ und C#

Deine Textbox liefert dir einen System.String.

Du kannst dir die Zeichenkette mit  ToCharArray() in ein Array vom Typ 
System.char wandeln lassen und kannst dann auf die einzelnen Elemente 
zugreifen.

Dieses Zeichen kannst du dann deiner neuen Textbox zuweisen.

von Stefan G. (Firma: BzD) (master23)


Lesenswert?

es steht auf jedenfall überall Visual C++, kenne mich eben nicht so aus 
mit diesen Sprachen, aber in der Schule muss mann anwenden was einem 
vorgegeben wird.. auch wenns in andern sprachen einfacher wäre..

Oke danke und wie wende ich das ganze an?
z.B.

n = Convert:: ToCharArray(textBox1->Text);
??

und dann??

Gruss

von Peter II (Gast)


Lesenswert?

Stefan Graf schrieb:
> Oke danke und wie wende ich das ganze an?

> n = Convert:: ToCharArray(textBox1->Text);

was ist textBox1->Text für ein Datentype? Dann schaust du dort in der 
Hilfe nach welche Methode er enbietet.

von Karl H. (kbuchegg)


Lesenswert?

Wenn ich noch was einwenden darf:

Die Zerlegung, indem man auf die einzelnen Buchstaben eines Textes 
zugreift, kann unter Umständen schon etwas Magenschmerzen bereiten, wenn 
man bedenkt, dass der Benutzer damit eine 3-stellige Zahl eingeben muss.

Einfacher wird es unter Umständen, wenn man den Text in eine 
tatsächliche Zahl umwandeln lässt und diese dann nach dem Muster 
zerlegt:

  386 / 10  -> 38
  386 % 10  -> 6

also Division durch 10, bzw. Restbildung bei der Division.

von Sebastian L. (Gast)


Lesenswert?

Also wenn er die zahl dann wieder zur anzeige braucht wird sie ja wieder 
in einen Text gewandelt, ich würds speziell jetzt so machen:
1
int laenge = label.Text.Length
2
3
for(int i = 1; i<=laenge;i++)
4
{
5
   char c = label.Text[laenge-i];
6
   switch(i)
7
   {
8
      case 1: Anzeige1.Text = n; break;
9
      case 2: ...
10
   }
11
}

Aber nur im speziellen fall

Ansonsten kann man das auch mit ner liste von integer machen kann man 
immer mal wieder brauchen

von Sesk K. (zeborok)


Lesenswert?

Angenommen du hast einen String
1
string myString("123");
dann könntest du auf die einzelnen Positionen wie folgt zugreifen:
1
myString[0];    //0tes Element
2
myString.at(1); //1tes Element

Wenn du von einer Zahl (integer) kommst:
1
#include <iostream>
2
#include <stdlib.h>
3
4
//(...)
5
  char buffer [10];
6
  size_t bufferSize = (sizeof(buffer) / sizeof(buffer[0]));
7
  int radix         = 10;
8
  int input         = 123;
9
10
  _itoa_s(input, buffer, bufferSize, radix);
11
12
  cout << buffer[0] << buffer[1] << buffer[2] << endl;

von Stefan G. (Firma: BzD) (master23)


Lesenswert?

@ Herr Buchegger diese Idee hatte ich auch schon, dachte nur, dass wenn 
ich dass ganze mehr als 3 stellen ausweite es irgendwann nicht mehr 
wirklich übersichtlich ist. Da ich das Ganze aber am schluss sowiso noch 
in zahlen umwandeln muss, da ich es umrechnen muss damit es korrekt 
ausgegeben wird (div. verdrathungs fehler der Hw bauers) wäre dies mal 
ein Lösungsansatz welchen ich wohl vorerst mal verfolgen werde.

Danke

@ sebastian auch mal auf diese wiese versuchen

von Stefan G. (Firma: BzD) (master23)


Lesenswert?

phu jetzt hats mir die Hälfte gelöscht..

die Lösung von Sesk mit dem myStrin.at() ist eigentlich genau der 
Lösungsansatz, welchen ich verfolgt habe. schaffe es aber nicht das 
ganze korrekt in einer Forms anwendung einzubetten. Werds allerding mit 
deinem input nochmals versuchen, denn ich glaube das wäre wohl die 
sauberste Lösung.

Danke & Gruss Stefan

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
Noch kein Account? Hier anmelden.