winForms C++ auseinandernehmen einer Zahl

(Firma: BzD) #2659332
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
(Firma: BzD) #2659377
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
Gast #2659405
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.
#2659628
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.
Gast #2659637
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
#2659699
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;
(Firma: BzD) #2659778
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
(Firma: BzD) #2659781
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren