Umwandlungsproblem
-
Jockelx schrieb:
Meine Güte...
pb = std::stoi(s.substr(Nummer,1));
Dann bleibt bp immer 0 ... ist also falsch ...[/quote]
0?
Ich finde den Tipp zwar auch nicht gut, aber pb sollte Werte zwischen 49-59 (oder so ungefähr) haben[/quote]Damit macht er das:
1 ist 1 Ziffern lang
libc++abi.dylib: terminating with uncaught exception of type std::out_of_range: basic_string
(lldb) Das kann ich nicht deuten ....
-
otto56 schrieb:
ich möchte schon, daß er bei 1 1 ausgibt und bei 2 2 .
Dann mach halt so, wie Jockelx vorschlug mit stoi, oder folgendes:
vector<int>Zifferncontainer; for (Nummer = 0; Nummer < s.size(); Nummer++); { pb = s[Nummer] - '0'; Zifferncontainer.push_back(pb); cout<<pb<<" pb "<<endl;
-
otto56 schrieb:
libc++abi.dylib: terminating with uncaught exception of type std::out_of_range: basic_string
(lldb) Das kann ich nicht deuten ....Jockelx schrieb:
Indizes fangen in C++ übrigens bei 0 an.
Belli schrieb:
Naja, ich sehe jetzt erst, dass Deine ganze Schleife Schrott ist,
-
Belli schrieb:
otto56 schrieb:
ich möchte schon, daß er bei 1 1 ausgibt und bei 2 2 .
Dann mach halt so, wie Jockelx vorschlug mit stoi, oder folgendes:
vector<int>Zifferncontainer; for (Nummer = 0; Nummer < s.size(); Nummer++); { pb = s[Nummer] - '0'; Zifferncontainer.push_back(pb); cout<<pb<<" pb "<<endl;
Das kann ich mir jetzt gar nicht deuten. So ist der cout:
9 ist 1 Ziffern lang
-48 pb
10 ist 2 Ziffern lang
-48 pb
11 ist 2 Ziffern lang
-48 pbwieso 48?
-
Zeig mal dein komplettes Programm. Du hattest da noch ein paar globale Variablen,
die auch noch genau so heissen, wie lokale ('s').
Ich denke da ist was durcheinander geraten.
-
Jockelx schrieb:
Zeig mal dein komplettes Programm.
Es ist jetzt etwas chaotisch ....
#include <stdio.h> #include <string.h> #include <iostream> using namespace std; #include <sstream> #include <string> #include <vector> string s; int Nummer; int pb; int input; int main (void) { for (int zahl =1; zahl<=101;zahl++) { string s = to_string(zahl); // int in String //cout << s << endl; cout<<zahl<<" ist "<<s.length()<<" Ziffern lang"<<endl; int Länge = s.length();// string in int //cout<<"Länge=" << Länge << endl; //vector<int>Zifferncontainer(Länge); /* for (Nummer=1; Nummer<=Länge-1;Nummer++); { cout<<Nummer<<" Nummer"; //int input = std::stoi(s.substr(Nummer,1)); //int input =s[Nummer]; int input = std::stoi("5"); Zifferncontainer.push_back(input); cout<<" "<<input<<" input "<<endl; } */ vector<int>Zifferncontainer; for (Nummer = 0; Nummer < s.size(); Nummer++); { pb = s[Nummer] - '0'; Zifferncontainer.push_back(pb); cout<<pb<<" pb "<<endl; }} }
-
Was soll das denn:
pb = s[Nummer] - '0';
-
otto56 schrieb:
Jockelx schrieb:
Zeig mal dein komplettes Programm.
Es ist jetzt etwas chaotisch ....
Richtig.
otto56 schrieb:
#include <stdio.h> #include <string.h> #include <iostream> using namespace std; #include <sstream> #include <string> #include <vector> string s; int Nummer; int pb; int input; int main (void) { for (int zahl =1; zahl<=101;zahl++) { string s = to_string(zahl); // int in String //cout << s << endl; cout<<zahl<<" ist "<<s.length()<<" Ziffern lang"<<endl; int Länge = s.length();// string in int //cout<<"Länge=" << Länge << endl; //vector<int>Zifferncontainer(Länge); /* for (Nummer=1; Nummer<=Länge-1;Nummer++); { cout<<Nummer<<" Nummer"; //int input = std::stoi(s.substr(Nummer,1)); //int input =s[Nummer]; int input = std::stoi("5"); Zifferncontainer.push_back(input); cout<<" "<<input<<" input "<<endl; } */ vector<int>Zifferncontainer; for (Nummer = 0; Nummer < s.size(); Nummer++); // <--- dieser Strichpunkt muß weg { pb = s[Nummer] - '0'; Zifferncontainer.push_back(pb); cout<<pb<<" pb "<<endl; }} }
VG
-
Schlangenmensch schrieb:
Was soll das denn:
pb = s[Nummer] - '0';
Damit bekommst Du den Wert eines Ziffernzeichens in einen int
'0' -> 0
'1' -> 1
etc.Das funktioniert weil "zufällig" die Ziffern in der ASCII Tabelle in der richtigen Reihenfolge hintereinander stehen.
VG
-
Hab nur gedacht, der Dezimalwert von '0' ist 48 nach ASCII Tabelle. Und da die Ausgabe -48 ist kam mir das verdächtig vor.
-
Ja eben deshalb ist ja '0' - '0' = 0, '1' - '0' = 1, '2' - '0' = 2 usw.
-
Schlangenmensch schrieb:
Hab nur gedacht, der Dezimalwert von '0' ist 48 nach ASCII Tabelle. Und da die Ausgabe -48 ist kam mir das verdächtig vor.
Da die Schleife nichts getan hat, enthielt Nummer den Index des ersten Bytes hinter dem String. War wohl eine 0.
-
mgaeckler schrieb:
for (Nummer = 0; Nummer < s.size(); Nummer++); // <--- dieser Strichpunkt muß weg
Oh ja, Scheiße ... den hab ich einfach mitkopiert ... sorry!
-
Vielen Dank an alle, bin allein fertig geworden, Programm funzt, alles berechnete.....
-
oto56 schrieb:
bin allein fertig geworden
oto56 schrieb:
alles berechnete.....
P. S.: Dein Programmierstil ähnelt sehr deinem Schreibstil...