Umwandlungsproblem



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



  • oto56 schrieb:

    bin allein fertig geworden

    🙄

    oto56 schrieb:

    alles berechnete.....

    🙄

    P. S.: Dein Programmierstil ähnelt sehr deinem Schreibstil...


Anmelden zum Antworten