String to Integer
-
#include <cstdint> #include <string> #include <set> #include <map> #include <stdexcept> #include <iostream> bool baseValid(const uint8_t base) { std::set<uint8_t> bases = {2, 4, 8, 10, 16, 32}; return bases.find(base) != bases.end(); } uint32_t str_to_uint32(const std::string &str, const uint8_t base = 10) { if (!baseValid(base)) { throw std::invalid_argument("Invalid base"); } std::map<char, uint8_t> charToNum = {{'0', 0}, {'1', 1}, {'2', 2}, {'3', 3}, {'4', 4}, {'5', 5}, {'6', 6}, {'7', 7}, {'8', 8}, {'9', 9}, {'a', 10}, {'b', 11}, {'c', 12}, {'d', 13}, {'e', 14}, {'f', 15}, {'g', 16}, {'h', 17}, {'i', 18}, {'j', 19}, {'k', 20}, {'l', 21}, {'m', 22}, {'n', 23}, {'o', 24}, {'p', 25}, {'q', 26}, {'r', 27}, {'s', 28}, {'t', 29}, {'u', 30}, {'v', 31}}; uint32_t result = 0; for (auto c : str) { auto cl = std::tolower(c); if (charToNum.find(cl) == charToNum.end()) { throw std::invalid_argument("Invalid character"); } result = result * base + charToNum[cl]; } return result; } int main(int argc, char const *argv[]) { std::cout << str_to_uint32("deadbeef", 16) << "\n"; std::cout << str_to_uint32("01237") << "\n"; return 0; }
Bei den includes bin ich mir unsicher, ob alle richtig sind.
Des Weiteren, bitte die Kompilierzeile mit angeben.
-
die Fehlerbehandlung geht auch so:
uint32_t str2int(string &str, uint8_t base = 16 ){ size_t n = 0; uint32_t result = 0; for( string::reverse_iterator i = str.rbegin(); i != str.rend(); i++, n++){ uint8_t ord = int(*i); if( ord >= '0' && ord <= '9' ) {ord -= 48;} // 0-9 else if( ord >= 'a' && ord <= 'f') {ord -= 87;} // a-f else if( ord >= 'A' && ord <= 'F') {ord -= 55;} // A-F else{ throw string("Wrong Character in Parameter-String"); } float f = pow(base,n); result += f*ord; } return result; }
Also gleich da wo es knallen könnte.
Danke auch und Viele Grüße!!!
-
Bitte Codeschnipsel immer formatiert posten... Gebot des Anstands.
-
@nameName sagte in String to Integer:
Bitte Codeschnipsel immer formatiert posten... Gebot des Anstands.
nun, ich bevorzuge in Sachen Einrückung den Style Java Sun. Und der ist absolut legitim
Viele Grüße.
-
Ich hätte auch schreiben können, das ist eine Selbstverständlichkeit. Und nein, dein Code ist nicht formatiert. Bin mal raus aus dem Thema.
-
@nameName sagte in String to Integer:
Ich hätte auch schreiben können, das ist eine Selbstverständlichkeit. Und nein, dein Code ist nicht formatiert. Bin mal raus aus dem Thema.
Meinen Code habe ich mit den Mitteln formatiert die das Forum dazu anbietet. Infolgedessen sieht der von mir gepostete Code ganz genauso aus wie der Code den die Anderen hier gepostet haben.
MFG
-
@_ro_ro sagte in String to Integer:
@DocShoe
Mein Compiler kennt std::stoi noch nicht.Ernsthaft?
Bist du sicher, dass du dann nicht upgraden solltest? Die Funktion gibt es seit C++11 (also seit 2011). Wir haben jetzt 2024. Bist du sicher, dass du wirklich einen so alten Compiler (oder Standardbibliothek) hast oder brauchst?
Welchen Compiler verwendest du in welcher Version?
Dann hättest du ja auch keine Smart-Pointer zur Verfügung?! Und
std::auto_ptr
ist seitstd::unique_ptr
nicht mehr zeitgemäß. C++11 war ein riesiges Update der Sprache C++ mit unzähligen neuen Features. Du programmierst doch auch nicht in Perl 4?! Und würdest sicher niemandem raten, Perl 4 zu lernen.
-
meine Anwendungen laufen auf unterschiedlichen Plattformen und unter verschiedenen Versionen. D.h., daß ich auch in Perl schon immer versionsunabhängig sowie plattformunabhängig entwickelt habe.
MFG
-
@_ro_ro sagte in String to Integer:
meine Anwendungen laufen auf unterschiedlichen Plattformen und unter verschiedenen Versionen. D.h., daß ich auch in Perl schon immer versionsunabhängig sowie plattformunabhängig entwickelt habe.
MFG
Und das soll ein Argument sein eine compiler version von 2015 zu nutzen bzw. den c++11 support nicht zu aktivieren?
@wob: Laut der fehlermeldung aus seinem anderen thread nutzt er unter windows mingw 5.3.0 was gcc 5.3.0 ist.
-
Ok Du hast Recht, ich sollte endlich mal upgraden
c++Version: 201402
Habe ich jetzt.Viele Grüße!
-
Ich glaube, der Punkt ist, die Regulars lassen sich nicht gerne veräppeln... @_ro_ro
Und einmal "Viele Grüße" genügt doch.
Also gib doch einfach genau an, wie du deine Programme genau übersetzt. Da genügt glaube ich auch ein Aufruf von
gcc -v
oder so.
-
Die c++ Version steht in __cplusplus und diese Angabe habe ich in einen Platzhalter ins Template gesetzt. Steht ganz unten auf der Seite
http://rolfrost.de/form.chtmlUnd da Du jetzt den URL kennst, kannst Du gerne mal damit spielen und versuchen dem Server einen Status 500 oder eine andere Fehlermeldung zu entlocken. Ich bitte darum!
mfg
-
Alles, was mit PHP läuft, und kein open source peer review durchlaufen ist... ist potenziell unsicher. Aber ehrlich, ich habe weder Zeit noch die Lust dazu, den Server eines 15Jährigen anzugreifen.
Erzähl mir lieber, was das nun mit dem Thema zu tun hat...
-
Dieser Beitrag wurde gelöscht!
-
-
Sorry, das wusste ich nicht.
-
Ok, vielleicht wird das ja doch noch was mit uns
Also, wenn ich hier eine meiner Seiten linke dann ist das eine Seite die mit c++ erstellt wird.
So wie diese hier: http://rolfrost.de/env.chtmlUnd ich denke, daß es zur Verständigung in diesem Forum beiträgt, daß man seine Entwicklungen auch mal vorstellt. Insbesondere wenn es noch Fragen dazu gibt. Denn entgegen meiner mit Perl erstellten Seiten bin ich in Sachen C++ bei weitem noch nicht sicher alle Fehlerfälle erfasst zu haben.
Ansonsten habe ich alles (!) beherzigt was hier besprochen wurde, einen neuen Compiler installiert und den Murks von gestern entsorgt.
Schönen Sonntag.
-
Die negativen Bewertungen gehen wieder los. Ihr wart ja auch etwas im Rückstand damit...
@_ro_ro Wie gesagt, mich interessiert deine Seite nicht, und ich sehe den Zusammenhang zu diesem Thema auch nicht.
Dir auch schönen Sonntag.
... So, und jetzt bitte weiter fleißig negativ bewerten. Ich denke, -5 ist schaffbar.