www.mikrocontroller.net

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


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Stefan Graf (Firma: BzD) (master23)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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

Autor: Thomas (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Und du bist dir sicher, dass du die Windows Forms mit C++ benutzt und 
nicht mit C#?

Autor: Stefan Graf (Firma: BzD) (master23)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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

Autor: Sebastian-L (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hi, wenn du einen string als ausgangsbasis hast solltest es doch kein 
problem sein die ZEICHEN zu trennen oder?

Autor: Stefan Graf (Firma: BzD) (master23)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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?

Autor: Thomas (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.

Autor: Stefan Graf (Firma: BzD) (master23)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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

Autor: Peter II (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.

Autor: Karl Heinz Buchegger (kbuchegg) (Moderator)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.

Autor: Sebastian L. (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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:
int laenge = label.Text.Length

for(int i = 1; i<=laenge;i++)
{
   char c = label.Text[laenge-i];
   switch(i)
   {
      case 1: Anzeige1.Text = n; break;
      case 2: ...
   }
}

Aber nur im speziellen fall

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

Autor: Sesk K. (zeborok)
Datum:

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

Wenn du von einer Zahl (integer) kommst:
#include <iostream>
#include <stdlib.h>

//(...)
  char buffer [10];
  size_t bufferSize = (sizeof(buffer) / sizeof(buffer[0]));
  int radix         = 10;
  int input         = 123;

  _itoa_s(input, buffer, bufferSize, radix);

  cout << buffer[0] << buffer[1] << buffer[2] << endl;

Autor: Stefan Graf (Firma: BzD) (master23)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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

Autor: Stefan Graf (Firma: BzD) (master23)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net