String umwandeln
-
Hallo !
Folgendes Problem ... Ich habe eine Funktion geschrieben die jedes Zeichen eines Strings, bestehend aus "Hex-Zeichen" (0 - F), in eine 5 stellige andere (konstante) Zeichenfolge konvertiert. Zum Beispiel wird "A1F5" zu "11112,22111,11111,22222" (ohne Kommar's).
Wie ist es jetzt möglich diesen String zurück in "A1F5" zu konvertieren ?
Ich weiß nämlich nicht wie ich 5 Zeichen aufeinmal mit switch überprüfen kann.
Hätte vielleicht jemand eine Hilfestellung ?
-
Mit switch gar nicht. Entweder tonnenweise if's oder du bastelst dir was mit 'ner Map.
-
Du könntest std::string nehmen, da gibts die Funktion compare()
mfg
Glamdring
-
So, ich hab da mal ne Klasse zusammengebastelt. Die ist sicherlich noch Verbesserungswürdig, aber bisher tut sie ihren Dienst. Ich war auch zu faul, das ganze zu kommentieren. Hoffentlich ist das trotzdem Verständlich.
#include <iostream> #include <cstdlib> #include <string> #include <algorithm> class Codierung{ private: std::string code[16]; std::string ergebnis; int CharToHex(char x){ if (isdigit(x)) return x-'0'; if (isalpha(x)) { x = toupper(x); if (x<'A' || x>'F') return -1; return (x - 'A') + 10; } return -1; } char IntToHexChar(int x){ return "0123456789ABCDEF"[x & 0xF]; } public: Codierung(){ ergebnis.resize(100); code[0x0]="11111"; code[0x1]="22222"; code[0x2]="33333"; code[0x3]="11223"; code[0x4]="22211"; code[0x5]="12312"; code[0x6]="32123"; code[0x7]="33212"; code[0x8]="21212"; code[0x9]="31211"; code[0xA]="12332"; code[0xB]="33331"; code[0xC]="33311"; code[0xD]="22231"; code[0xE]="31231"; code[0xF]="31313"; } ~Codierung(){}; std::string Encode(std::string &quelle){ ergebnis=""; for (std::string::iterator i = quelle.begin();i < quelle.end();i++){ ergebnis += code[CharToHex(*i)]; } return ergebnis; } std::string Decode(std::string &quelle){ ergebnis=""; std:: string temp("",5); for (std::string::iterator i = quelle.begin();i<quelle.end();i+=5){ std::copy ( i , i+5 ,temp.begin() ); for (int iter=0 ; iter<=0xF ; iter++) if(code[iter] == temp) ergebnis += IntToHexChar(iter); } return ergebnis; }; }; int main(int argc, char *argv[]) { std::string x="0123456789ABCDEF"; std::string erg; Codierung code; erg = code.Encode(x); std::cout << x << std::endl << erg << std::endl << code.Decode(erg); return 0; }
grüße Con@n
-
Danke für die Antworten.
Ich habe es jetzt mit X-If Blöcken gelöst (decodieren*). Sicherlich nicht die eleganteste Lösung vor allem nicht wirklich C++ aber das kommt dann später ...
*decodieren != entschlüsseln.