String per Vector als Rückgabewert
-
Nabend Forum!
Ich brauche mal ein wenig Nachhilfe mit dem Vector... Ich raffe das irgendwie nicht, wie ich den zu benutzen habe...
Folgende Situation: Ich rufe aus meiner main-Fkt. eine Funktion auf, die zwei Strings in je zwei double's umwandeln und wieder an die main-Fkt. zurückgeben soll. Dass das mit nem Array nicht klappt, habe ich schon festgestellt. Problem ist, das ich mal einen mal zwei Strings habe und diese Information auch der main-Fkt zur Verfügung gestellt werden muss. Von daher wäre ein Vektor ideal, wenn ich das richtig gelesen habe.
Ich habe dazu mal folgendes kleines Programm erstellt, was natürlich nicht funktioniert, da ich hier versuche ein Array zurück zugeben:
#include <stdlib.h> #include <iostream> #include <stdio.h> using namespace std; double funktion(); int main() { double ausgabe[2]; ausgabe = funktion(); printf("1. Ausgabe: %0.f\n", ausgabe[0]); printf("2. Ausgabe: %0.f\n", ausgabe[1]); printf("\nEnde! \n"); return 0; } double funktion() { char datena = {'1', '2', '3', '4', '5'}; char datenb = {'6', '7', '8', '9', '0'}; double buffer[2]; buffer[0] = atof(datena); buffer[1] = atof(datenb); return buffer; }
-
char datena = {'1', '2', '3', '4', '5'}; char datenb = {'6', '7', '8', '9', '0'};
Geht das?
Ansonsten: Ja, std::vector. Oder spezifisch hier auch std::pair (mit <double, double> las Template-parameter).
Also so in etwa:
std::pair<double, double> get_two_fpoints(const std::string& a, const std::string& b) { double rval, rval2; std::ostringstream stream(a); stream >> rval; stream.str(b); stream >> rval2; return std::make_pair(rval, rval2); }
Ansonsten: Bitte C++-Header:
#include <cstdio> #include <cstdlib>
Standard I/O-Streams:
std::cout << "1. Ausgabe: " << deindouble << '\n';
-
Ungetestet aber so geht's, wobei funktion() immer das gleiche zurückgibt, also kannst eigentlich gleich die floats eintragen ohne atof
#include <vector> #include <iostream> #include <stdio.h> using namespace std; vector<float> funktion(); int main() { vector<float> v; v = funktion(); printf("1. Ausgabe: %0.f\n", v[0]); printf("2. Ausgabe: %0.f\n", v[1]); printf("\nEnde! \n"); return 0; } vector<float> funktion() { vector<float> vec(2); vec[0] = atof("12345"); vec[1] = atof("67890"); return vec; }
-
aves_aquila schrieb:
Ich rufe aus meiner main-Fkt. eine Funktion auf, die zwei Strings in je zwei double's umwandeln und wieder an die main-Fkt. zurückgeben soll. Dass das mit nem Array nicht klappt, habe ich schon festgestellt. Problem ist, das ich mal einen mal zwei Strings habe
Die Strings sind deine Parameter? Warum rufst du die Funktion dann nicht zweimal auf?
-
char datena = {'1', '2', '3', '4', '5'}; char datenb = {'6', '7', '8', '9', '0'};
Jup, das geht.
Die Tipps werde ich gleich mal probieren. Danke für die schnelle Hilfe übrigens.
Ich mache hier übrigens den Umstand mit den Strings und dem einmaligen Aufruf, weil ich das ganze in einer anderen Aufgabenstellung aus einem Struct bekomme und in der main-Fkt. nur einmal aufrufen muss/möchte um die Daten dort weiter zu verwerten.
-
aves_aquila schrieb:
char datena = {'1', '2', '3', '4', '5'}; // so NICHT!!! Compilerfehler char datenb = {'6', '7', '8', '9', '0'}; char datena[] = {'1', '2', '3', '4', '5'}; // char datena[5]; datena[0]='1'; ... char datenb[] = {'6', '7', '8', '9', '0'};
Jup, das geht.
Wie soll das gehen? Du willst in deine Schachtel eine Schachtel verstauen, die 5-mal so groß ist....!? Außerdem mein VC++ Compiler meckert (GOtt sei Dank). Das zweite Element ist ihm schon zu viel!
-
@PhillipHToner
Huppala... Hast recht! Ich hatte im falschen Code geschaut. Hatte bei einem anderen Lösungsansatz mit structs gespielt. Da sah das dann aber so aus (und funktionierte):
void funktion() { struct zeichen { char a[6]; char b[6]; }daten; daten.a = {'1', '2', '3', '4', '5'}; daten.b = {'6', '7', '8', '9', '0'}; zahl.a = atof(daten.a); zahl.b = atof(daten.b); }
-
Habe es mit Vector hinbekommen.
Danke für die Hilfe!