C++-Implementierung
Standardbibliotheks-Umwandlungsmethoden
1. Verwendung von Standard-Umwandlungsfunktionen
#include <iostream>
#include <string>
#include <bitset>
class NumberConverter {
public:
// Dezimal zu Binär
static std::string decimalToBinary(int decimal) {
return std::bitset<32>(decimal).to_string();
}
// Binär zu Dezimal
static int binaryToDecimal(const std::string& binary) {
return std::stoi(binary, nullptr, 2);
}
// Hexadezimal-Umwandlungen
static int hexToDecimal(const std::string& hex) {
return std::stoi(hex, nullptr, 16);
}
static std::string decimalToHex(int decimal) {
char buffer[20];
sprintf(buffer, "%X", decimal);
return std::string(buffer);
}
};
Benutzerdefinierte Umwandlungsklasse
Umfassender Konverter für Zahlensysteme
class AdvancedNumberConverter {
private:
// Hilfsmethode zur Umwandlung von Ziffern in Werte
static int charToValue(char c) {
if (c >= '0' && c <= '9') return c - '0';
if (c >= 'A' && c <= 'F') return c - 'A' + 10;
if (c >= 'a' && c <= 'f') return c - 'a' + 10;
throw std::invalid_argument("Ungültige Ziffer");
}
public:
// Generische Methode zur Basisumwandlung
static int toDecimal(const std::string& number, int base) {
int decimal = 0;
int power = 0;
for (int i = number.length() - 1; i >= 0; --i) {
decimal += charToValue(number[i]) * std::pow(base, power++);
}
return decimal;
}
// Dezimal in beliebige Basis
static std::string fromDecimal(int decimal, int base) {
if (decimal == 0) return "0";
const std::string digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
std::string result;
while (decimal > 0) {
result = digits[decimal % base] + result;
decimal /= base;
}
return result;
}
};
Praktisches Implementierungsbeispiel
int main() {
// Umwandlungsdemonstrationen
try {
// Standardumwandlungen
std::cout << "Dezimal zu Binär: "
<< NumberConverter::decimalToBinary(42) << std::endl;
// Erweiterte Umwandlungen
std::cout << "Binär zu Dezimal: "
<< AdvancedNumberConverter::toDecimal("101010", 2) << std::endl;
// Hex-Umwandlungen
std::cout << "Hexadezimal zu Dezimal: "
<< AdvancedNumberConverter::toDecimal("2A", 16) << std::endl;
// Dezimal in verschiedene Basen
std::cout << "Dezimal 42 in Basis 3: "
<< AdvancedNumberConverter::fromDecimal(42, 3) << std::endl;
}
catch (const std::exception& e) {
std::cerr << "Umwandlungsfehler: " << e.what() << std::endl;
}
return 0;
}
Komplexität der Umwandlungsmethoden
Umwandlungstyp |
Zeitkomplexität |
Platzkomplexität |
Dezimal zu Basis |
O(log n) |
O(log n) |
Basis zu Dezimal |
O(k) |
O(1) |
Fehlerbehandlungsstrategien
graph TD
A[Eingabevalidierung] --> B{Gültige Eingabe?}
B -->|Ja| C[Umwandlung durchführen]
B -->|Nein| D[Ausnahme werfen]
C --> E[Konvertierten Wert zurückgeben]
D --> F[Fehler fehlerfrei behandeln]
Best Practices
- Verwenden Sie bei Bedarf integrierte Typumwandlungsmethoden.
- Implementieren Sie eine robuste Fehlerbehandlung.
- Berücksichtigen Sie die Leistung bei Umwandlungen großer Zahlen.
- Überprüfen Sie die Eingabe vor der Umwandlung.
Kompilierung und Ausführung
Zum Kompilieren unter Ubuntu 22.04:
g++ -std=c++11 number_converter.cpp -o number_converter
./number_converter
Hinweis: LabEx empfiehlt die Übung dieser Implementierungsmethoden, um die Umwandlung von Zahlensystemen in C++ zu meistern.