Eine gegebene ganze Zahl zerlegen und seine Ziffern in einem char-array speichern(Aber man weiß nicht die Länge der Zahl)



  • long nombre;
    long quadrat;
        cout<<"Geben Sie ein Zahlenstring ein: "<<endl;
        cin>>zahl;
        istringstream istr(zahl);
        if(istr>>nombre)  // ich prüfe hier ob der String nur aus Ziffern besteht
        {
         stringstream buffer(zahl);      
            buffer>>nombre;   // ich gebe nombre die Zahl von String
            quadrat = nombre*nombre; // berechnung von quadrat
            cout<<"Quadrat der eingegebenen Zahl: "<<quadrat<<endl; 
            long vIn = 0;                                        // aber jetzt das Problem: wie kann ich eine vorher 
                                                                //  unbekannte Zahl (hier quadrat) in Ziffern zerlegen 
                                                              // und die einzelnen Ziffern des Resultats in einem char- 
                                                             // array speichern?
             vector<char>array = (char)vIn;


  • Das Zahlenstring muss auch eine Maximal-Länge 5 haben.



  • Warum liest nicht gleich einen long von cin?

    Wenn das Resultat std::vector<char> ok ist, dann ist std::string sicher auch ok? std::to_string()
    Warum willst Du überhaupt die Zahl in einem "Char Array" (welcher Form auch immer) haben?



  • @EBD Fang bei der 1er-Stelle der Zahl an und drehe am Ende den String(char-Array) um.



  • @EBD sagte in Eine gegebene ganze Zahl zerlegen und seine Ziffern in einem char-array speichern(Aber man weiß nicht die Länge der Zahl):

    if(istr>>nombre)  // ich prüfe hier ob der String nur aus Ziffern besteht
    

    Nein. Das wird hier nicht geprüft. Das ich auch wichtig zu verstehen.

    Hier wird aus dem Stream in nombre gelesen. Wenn im Stream "123xzy" steht, wird einfach eben nur "123" eingelesen und xyz verbleibt im Stream. Das ist also ein Check, ob am Anfang des Streams etwas steht, das eine Zahl ist.

    Was für ein Datentyp hat "zahl"? Und ich frage mich überhaupt, warum du im Code so viele verschiedene stringstreams hast. cin ist doch bereits ein Stream, warum der Weg cin->zahl->istr->nombre?

    Halte die Stream-Benutzung minimal.



  • Darunter ist die ganze Aufgabe. Ich habe Probleme mit der Umwandlung und Speicherung der Ziifern in char-array.

    Lesen Sie über die Tastatur einen String der Maximal-Lange 5 ein, der nur aus Ziffern
    bestehen darf (Prüfung nach der Eingabe). Benutzen Sie eine string-Variable zur Spei-
    cherung. Wandeln Sie diesen String in eine Zahl vom Typ long um, berechnen Sie das
    Quadrat dieser Zahl und geben Sie es aus. Speichern Sie die einzelnen Ziffern des Resultats
    anschließend in einem char array, wobei sie zwischen den Ziffern jeweils eine Leerstelle
    lassen und geben Sie dieses Array aus. Bei dieser Aufgabe ist die Verwendung von Biblio-
    theksfunktionen wie z.B. atol oder toString nicht erlaubt.

    Beispielausgabe:

    Bitte Zahlenstring eingeben: 11222j

    String enthaelt nicht nur Ziffern, bitte neu eingeben.
    Bitte Zahlenstring eingeben: 1297343

    String zu lang, bitte neu eingeben
    Bitte Zahlenstring eingeben: 1112

    Quadrat der eingegebenen Zahl: 1236544
    char-Array: 1 2 3 6 5 4 4



  • @Swordfish weil die Aufgabe es frag


  • Mod

    Wenn atol und toString nicht erlaubt sind, ist stringstream ganz sicher auch nicht im Geiste der Aufgabenstellung 🙂 .

    Das heißt aber auch, dass du effektiv noch gar nichts von der Aufgabe gelöst hast, so wie die Aufgabe gemeint ist. Du brauchst zunächst einmal einen Ansatz für die drei Funktionen "gucken, ob ein String nur Ziffern enthält", "String aus Ziffern in Zahlenvariable umwandeln", "Zahlenvariable als Dezimalstring mit Leerzeichen drin umwandeln". Da derzeit noch nichts davon da ist, kann man dir schwer konkret helfen, außer die Lösung hinzuschreiben. Fang daher mal an, die obigen drei Funktionen zu implementieren, und falls du dabei Probleme haben solltest (trotz ernsthafter Mühe diese selbst zu lösen), dann fragst du noch einmal konkret mit dem bis dahin vorhandenen Code um Rat.



  • @EBD Dann fang mal mit deiner eigenen atoi - besser strtol - an.



  • Lies den string am einfachsten mit getline ein - dann hast du die komplette Zeile in einer String-Variablen.

    #include <string>
    #include <iostream>
    
    int main() {
       std::string s;
       std::getline(std::cin, s);
       
        Funktion: s auf Maximallänge checken (oder ist es so zu verstehen, dass man nur 5 chars aus dem Stream lesen darf?)
        Funktion: s auf Ziffern testen
        Funktion: s in Zahl umwandeln
    
        ergebnis = zahl * zahl;
    
        Funktion: ergebnis in Ziffern wandeln
        Funktion: ausgeben mit Leerzeichen
    }
    

    Für alles, das mit "Funktion: " beginnt, solltest du am sinnvollsten eine eigene Funktion schreiben.

    Gegebenenfalls kannst du "Funktion: s auf Ziffern testen" und "Funktion: s in Zahl umwandeln" auch kombinieren.


Log in to reply