PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++ String zerlegen


Hypergast
2009-02-28, 14:51:19
Hallo

Ich habe vor ewigen Zeiten ein kleines Programm in C++ geschrieben bei dem man eine Zahl eingeben kann die dann zerlegt wird, das sah dann zb. so aus:

Eingabe xyz: 396

Ausgabe:

x1=3
y1=9
x1=6

Ebenso mit einer 9-stelligen Zahl:

Eingabe xyz: 583796241

Ausgabe:

x1=583
y1=796
x1=241

So sah der Code dazu für 3stellige Zahlen aus:

cout<<"X1: "<<(xyz/100)==x1<<endl;
cout<<"Y1: "<<((xyz)-(xyz/100*100))/10==y1<<endl;
cout<<"Z1: "<<(((xyz)-(xyz/100*100))-((xyz)-(xyz/100*100))/10*10)==z1<<endl;
cout<<"X1: "<<(xyz/100)<<endl;
cout<<"Y1: "<<((xyz)-(xyz/100*100))/10<<endl;
cout<<"Z1: "<<(((xyz)-(xyz/100*100))-((xyz)-(xyz/100*100))/10*10)<<endl;

Nun möchte ich den Code auf Stringwerte umschreiben und suche nach einer Variante die oben beschriebenes mit Strings macht, und das am besten gleich mit variablen Stringlängen die sich durch 3 teilen lassen, so das der String immer in 3 gleich lange Strings aufgeteilt wird.


Ich hoffe ich habe verständlich formuliert was ich haben will und danke Euch für Eure Vorschläge.


MfG
Hypergast

Coda
2009-02-28, 15:06:34
Nimm nen std::string und ruf darauf entsprechend substr auf.

Oder willst du vorgekauten Code?

Hypergast
2009-02-28, 15:14:36
Fertiger Code wäre zwar sehr bequem aber langfristig profitieren würde ich eher von einer Seite die mir generell erklärt was man mit Strings alles machen kann, allerdings OHNE dafür irrwitzige und weltfremde Beispiele anzuführen wo 5 andere Sachen erwähnt werden die ich dann in einem anderen Tutorial nachschlagen muss. Derzeit habe ich 10 Tabs offen ohne auch nur irgendwas weitergebracht zu haben, deswegen auch mein Thread hier im Forum.

Aber danke erstmal :)

Coda
2009-02-28, 15:16:40
Naja:

std::string test = "foobarqux";
std::string x = test.substr(0, 3);
std::string y = test.substr(3, 3);
std::string z = test.substr(6, 3);

Sollte doch relativ einleuchtend sein. Der erste Parameter von substr gibt die Startposition an (beginnend mit 0) und der zweite die Länge.

maximAL
2009-02-28, 15:31:04
...
www.cppreference.com

Hypergast
2009-02-28, 19:03:56
Ach, ich habe davor schon einen Fehler im Code.

Ich gebe die Zahlenwerte weiterhin als Int ein und mache dann eine Int > String Konvertierung, aber so wie es aussieht funktioniert die Konvertierung nicht und Wert wird nach wie vor als Int behandelt.

Der Code dazu sieht so aus:

#include <iostream.h>
#include <sstream>
#include <string>

using namespace std;

int main()

{
int xyz;
int xyz2;
int x1;
int x2;
int y1;
int y2;
int z1;
int z2;

cout<<"Bitte geben Sie die Startposition ein: ";
cin>>xyz;

std::stringstream sstr;
sstr << xyz;
std::string myString = sstr.str();

std::string x = xyz.substr(0,3);
std::string y = xyz.substr(3,3);
std::string z = xyz.substr(6,3);
}

Coda
2009-02-28, 19:35:33
Natürlich wird es als int behandelt, wenn du es als int deklarierst.

Hypergast
2009-02-28, 19:41:24
Aber so wie ich das verstanden habe sollte:

std::stringstream sstr;
sstr << xyz;
std::string myString = sstr.str();

Aus dem Int einen String machen.

Oder wie mache ich das wenn ich den Wert einmal als Int brauche und einmal als String?

Coda
2009-02-28, 19:42:18
Du wendest substr aber auf xyz an und nicht auf myString.

Allerdings verstehe ich nicht so ganz was der Code machen soll. Warum "Startposition"? Warum nimmst du nicht gleich den String entgegen?

Hypergast
2009-02-28, 20:06:29
Der ursprüngliche Code diente mir vor Jahren mal zu Übungszwecken und war schon längst abhehakt.

Aber gestern Abend kam ich nach einem Gespräch mit einem Freund ins grübeln und es ließ mich einfach nicht mehr los, ich wollte unbedingt die Variante mit dem String ausprobieren was ja jetzt dank Dir Coda funktioniert :)

Ursprünglich war es gedacht ein Objekt durch einen Raum zu bewegen und dann das eine oder andere physikalische Gesetz auf die Bewegung anzuwenden und die Ausgabe in eine .txt Datei zu speichern. Ich brauche den Wert als String also nur für die Ausgabe weil es ja wie man sieht sehr viel einfacher zu programmieren ist, an den Formeln im ersten Post bin ich damals eine Weile gesessen ;)

Hypergast
2009-03-05, 23:23:54
Ach es ist zum Hühner treten ...

Jetzt will ich die Werte doch direkt eingeben aber lt. C Standard muss die Eingabe wohl immer als int erfolgen ...