Umwandlungsproblem



  • Hallo, ich bin absoluter Neuling

    jetzt möchte ich Zahlen zerlegen.

    ich lasse es so machen. Eine Für schleife produziert zahlen.

    Dann wandele ich die in einen String und, und lass die Anzahl der Stellen (=Länge) ausgeben. Bis hierher funktioniert es.

    Nun sollen die Ziffern dieser zahl einzeln in einen Vector eingegeben werden.

    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++);
              {
                 pb = s.substr(Nummer,1);
                  Zifferncontainer.push_back(pb);
                  cout<<pb<<" pb "<<endl;
    

    Er sagt nun: assingning to int from inakzeptabel Typ...

    pb ist int. Da soll die jeweilige Ziffer rein, die grade in den Verrohe übertragen werden soll.

    Was mach ich falsch?



  • Hallo,

    otto56 schrieb:

    pb ist int.

    jetzt lügst du aber! 😉
    (bzw. zumindest weist du pb kein 'int' zu)

    Schau dir mal 'stoi' an.



  • Doch, ich hab oben

    int pb;
    

    zu stehen...

    ik find zu stop nix deutsches .... mit Beispiel



  • Das Ding heisst 'stoi', nicht stop (std::stoi um genau zu sein).
    Und es ist zwar gut, dass du deutsch lernen willst und deutsche Seiten suchst.
    Zum programmieren ist englisch aber extrem hilfreich.



  • Jockelx schrieb:

    Das Ding heisst 'stoi', nicht stop (std::stoi um genau zu sein).
    Und es ist zwar gut, dass du deutsch lernen willst und deutsche Seiten suchst.
    Zum programmieren ist englisch aber extrem hilfreich.

    ich schreib auch immer s t o i aber irgendjemand macht immer stop draus??

    Kannst du nicht mal ein kurzes Beispiel senden für s t o i? (mit Komentare)

    Ich glaub auch, s t o i geht nicht, weil er ja nicht den ganzen String in ein int umwandeln soll, sondern jeweils nur ein Zeichen aus dem String, und zwar das Zeichen, dessen Stelle Nummer angibt....



  • Falls du das wirklich ernst meinst, dann sende ich mal...

    int five = std::stoi("5"); // kommentar
    


  • otto56 schrieb:

    Nun sollen die Ziffern dieser zahl einzeln in einen Vector eingegeben werden.

    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++);
              {
                 pb = s.substr(Nummer,1);
                  Zifferncontainer.push_back(pb);
                  cout<<pb<<" pb "<<endl;
    

    Was mach ich falsch?

    Ersetze

    pb = s.substr(Nummer,1);
    

    durch

    pb = s[Nummer];
    


  • Gut, das geht, und was mach ich, wenn statt der "5" nun die 3. Ziffer aus dem String s dort stehen soll?

    womit arbeite ich da?



  • Hast Du gelesen, was ich geschrieben habe?



  • Ich verstehe echt nicht so ganz, wie man das nicht verstehen kann.

    Du hast doch selber schon die i-te Ziffer als string gefunden.
    Wolltest diese aber einem 'int' zuweisen, was nicht direkt geht.
    Daher mein Hinweis, dass du dir std::stoi mal ansehen solltest.

    So, und jetzt noch 1 & 1 zusammen rechnen...

    Indizes fangen in C++ übrigens bei 0 an.



  • Belli schrieb:

    Ersetze

    pb = s.substr(Nummer,1);
    

    durch

    pb = s[Nummer];
    

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



  • Jockelx schrieb:

    Ich verstehe echt nicht so ganz, wie man das nicht verstehen kann.

    Du hast doch selber schon die i-te Ziffer als string gefunden.
    Wolltest diese aber einem 'int' zuweisen, was nicht direkt geht.
    Daher mein Hinweis, dass du dir std::stoi mal ansehen solltest.

    So, und jetzt noch 1 & 1 zusammen rechnen...

    Indizes fangen in C++ übrigens bei 0 an.

    weis ich, aber ich kann doch da nicht Nummer hinschreiben, weil ich doch gar nicht die Nummer dort haben will, sondern die Ziffer, die an der benummerten Stelle in der Zahl steht ... Nummer und Zahl und Ziffer sind je etwas Getrenntes .....



  • Naja, ich sehe jetzt erst, dass Deine ganze Schleife Schrott ist, mach das mal so:

    ...
    
              vector<int>Zifferncontainer;
              for (Nummer = 0; Nummer < s.size(); Nummer++);
              {
                 pb = s[Nummer];
                  Zifferncontainer.push_back(pb);
                  cout<<pb<<" pb "<<endl;
    


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


Log in to reply