Umwandlungsproblem



  • Meine Güte...

    pb = std::stoi(s.substr(Nummer,1));
    

    otto56 schrieb:

    Belli schrieb:

    Ersetze

    pb = s.substr(Nummer,1);
    

    durch

    pb = s[Nummer];
    

    Dann bleibt bp immer 0 ... ist also falsch ...

    0?
    Ich finde den Tipp zwar auch nicht gut, aber pb sollte Werte zwischen 49-59 (oder so ungefähr) haben



  • Jockelx schrieb:

    Ich finde den Tipp zwar auch nicht gut, aber pb sollte Werte zwischen 49-59 (oder so ungefähr) haben

    Wahrscheinlich hat er einstellige Eingabezahlen und dann kommt halt Schrott raus, weil er mit dem Index 1 beginnt.
    Was gefällt Dir an dem Tipp nicht?



  • Du suggerierst, dass das

    std::string s= "123";
    	int i = s[1];
    
    	std::cout << i;
    

    2 ausgeben würde. Deshalb finde ich den Tipp nicht gut.



  • Jetzt machst Du mich unsicher, ob das nicht genau das wäre, was der TE möchte 🙂
    Bisher war ich nämlich der Meinung, er will den ASCII - Code ... 😕



  • Also, ich poste mal meinen ganzen Code... wie gesagt, nicht meckern, ich bin Anfänger ...

    #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<=1001;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;Nummer++);
              {
                  int input =s[Nummer];
                  //int input = std::stoi("5");
                  Zifferncontainer.push_back(input);
                  cout<<input<<" input "<<endl;
              }
    
          }
    
        }
    

    es geht schon um Zahlen beliebiger Länge, aber mir reicht int.
    1. zuerst Zahl bilden
    2. Länge feststellen
    3. in einen Container die einzelnen Ziffern packen ... damit er sie wieder ausspucken kann einzeln ..

    Das ist die Aufgabe, die ich mir gestellt habe.

    die ganzen cout's sind nur Hilfscouts, damit überprüf ich, die fliegen zum Schluß raus ...



  • Jockelx schrieb:

    Du suggerierst, dass das

    std::string s= "123";
    	int i = s[1];
     
    	std::cout << i;
    

    2 ausgeben würde. Deshalb finde ich den Tipp nicht gut.

    ich möchte schon, daß er bei 1 1 ausgibt und bei 2 2 . ich hab je die Realnummern, obwohl ich weiß, daß die Zählung mit 0 beginnt. also der erste Eintrag die Nummer 0 hat. Aber wir sind ja noch nicht bei der Ausgabe...



  • 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 pb

    wieso 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.....


Anmelden zum Antworten