Klasse Oktalsystem



  • Moin Leute.
    Bin noch Recht neu im C++ Game und habe folgendes Problem. Ich soll eine Klasse für Zahlen erstellen, welche nur bestimmt Ziffern enthalten darf und Ziffernweise dargestellt wird(z.B. 3_5_7_0 oder 4_6_3_2_1_0). Im Prinzip ein neu erdachtes Zahlensystem oder um es an einem Beispiel fest zu machen: das Oktalsystem. Dabei soll aber über die Konsole nicht eine Dezimalzahl eingegeben und zur Oktalzahl umgerechnet werden, sondern eine Text Datei eingelesen werden, welche ein oder zwei oktalzahlen und einen Operanden enthält und damit rechnet. Wie kann ich da aber feststellen, dass nur korrekte Ziffern (0 bis 7) genutzt wurden und dann auch richtig in dem Zahlensystem rechnen? Und wie schaffe ich es, dass die Zahlen keine festgelegte Länge haben, sonder 3, 4, 5 aber auch 12 Ziffern haben können?

    Liebe Grüße und schonmal großes Dankeschön

    Marius


  • Mod

    Schleifen und Verzweigungen…



  • #include <cstdlib>    // EXIT_FAILURE
    #include <string>
    #include <iostream>
    
    class octal_number {
        std::string data;
    
        public:
            friend std::istream& operator>>(std::istream&, octal_number &);
            friend std::ostream& operator<<(std::ostream&, octal_number const&);
    };
    
    std::istream& operator>>(std::istream& is, octal_number& on)
    {
        std::string number;
        std::cin >> number;
        if (number.find_first_not_of("01234567") != number.npos) {
            is.setstate(std::ios::failbit);
            return is;
        }
        on.data = number;
    
        return is;
    }
    
    std::ostream& operator<<(std::ostream &os, octal_number const& on)
    {
        os << on.data;
        return os;
    }
    
    int main()
    {
        std::cout << "Please enter an octal number: ";
        octal_number my_number;
        if (!(std::cin >> my_number)) {
            std::cerr << "That wasn't an octal number :(\n\n";
            return EXIT_FAILURE;
        }
        std::cout << "Yay! You entered: " << my_number << "\n\n";
    }
    

    Führende Nullen wegdingsen und mit octal_number::data rechnen darfst jetzt aber selber.



  • Dankeschön Swordfish!
    Das Rechnen und die Operanden überladen bekomme ich hin 🙂



  • @majus Zeig wennst fertig bist. Ich melde @SeppJ gerne als Freiwilligen der d'rüberschaut.