[C/C++] strtoul, was kommt in die Klammern?

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Chieftrain, 2. November 2009 .

  1. 2. November 2009
    strtoul, was kommt in die Klammern?

    Hallo liebe Rusher Gemeinde,
    ich hab da ne kurze Verständnisfrage. Wie kann ich einen String, in den Unsigned Long Datentyp convertieren? Hab schon den strtoul befehl gefunden, bei dem mir aber schleierhaft ist, was am Ende in die Klammern soll. Könnte mir das mal einer bitte Erklären?

    unsigned long int strtoul ( const char * str, char ** endptr, int base );

    Bei const * str soll wohl der String rein, aber die beiden anderen sind mir schleierhaft.

    Hoffe ihr könnt mir da helfen

    Nicht beirren lassen von den Posts unter mir. Diese netten Leute haben mir schon wegen einem anderen Problem geholfen.
     
  2. 2. November 2009
    AW: Ifstream pro Zeile als Variable speichern

    nimm nen array und da du ja eh chars ausliest kannst du ja einfach bei nem "\r" bzw. "\r\n" oder "\n" den index erhöhen und die sachen da abspeichern.

    ich hoff mal dass das einigermaßen verständlich für dich is ^^

    //code gibts keinen da ich ned weiß in welchen der >9000 klassen ein dynamischer-array/vektor/was-weiß-ich definiert is womit das möglich wär.
     
  3. 2. November 2009
    AW: Ifstream pro Zeile als Variable speichern

    Wenn du mir das anhand eines Beispiels erläutern könntest, wäre ich dir sehr Verbunden. Denn ich versteh nur Bahnhof Array sacht mir was, aber der Rest... Naja ^^
     
  4. 2. November 2009
    AW: Ifstream pro Zeile als Variable speichern

    Ich würds so lösen:
    Code:
    #include <iostream>
    #include <fstream>
    #include <vector>
    #include <string>
    
    int main () {
    
     std::ifstream ifs ( "test.txt" , std::ifstream::in );
     std::vector<std::string> stringList;
     std::string tempString;
    
     while (std::getline(ifs, tempString))
     stringList.push_back(tempString);
    
     ifs.close();
     
     std::vector<std::string>::iterator i;
     for (i = stringList.begin(); i != stringList.end(); ++i) 
     std::cout << *i << std::endl;
    
     return 0;
    }
     
  5. 2. November 2009
    AW: Ifstream pro Zeile als Variable speichern

    Ich hab grad Versucht damit ein wenig zu Arbeiten, aber abgesehen davon, dass ich von dem Code nur die hälfte verstehe, gibt er mir auch nur die Gesamt TXT aus Aber ich habe in deinem Code schon was gefunden, was mir helfen könnte und zwar Getline. Ich spiel damit mal ein wenig rum, ma gucken was dabei rauskommt
     
  6. 2. November 2009
    AW: Ifstream pro Zeile als Variable speichern

    joa klar gibt er dir die ganze txt aus, das liegt an der schleife unten mit dem iterator. aber wie du sehen kannst is jede zeile der txt in nem index des vektors gespeichert.

    vector - C++ Reference

    so wies aussieht kommst du über nen normalen array-access zu den zeilen.

    Code:
    std::string zeile1 = stringList[0]; //usw...
     
  7. 2. November 2009
    AW: Ifstream pro Zeile als Variable speichern

    Da wäre ich nie drauf gekommen! Ich danke euch beiden von Herzen ^^ Ihr seid echt meine Rettung!

    Ab jetzt komme ich, denke ich zumindestens ^^, alleine zurecht. Vielen lieben Dank nochmal!

    Oder doch nicht ^^:

    Wie kann ich einen String, in den Unsigned Long Datentyp convertieren? Hab schon den strtoul befehl gefunden, bei dem mir aber schleierhaft ist, was am Ende in die Klammern soll. Könnte mir das mal einer bitte Erklären?

    unsigned long int strtoul ( const char * str, char ** endptr, int base );

    Bei const * str soll wohl der String rein, aber die beiden anderen sind mir schleierhaft.

    Hoffe ihr könnt mir da helfen
     
  8. 2. November 2009
    AW: strtoul, was kommt in die Klammern?

    Code:
    const char *zahl = "123456789";
    std::cout << strtoul(zahl, NULL, 10);
    strtoul - C++ Reference < da stehts:

    Code:
    unsigned long int strtoul ( const char * str, char ** endptr, int base );
    1. Parameter str = Pointer zum String, der eine Zahl darstellt

    2. Parameter endptr = ein Pointer, der an die Stelle zeigt, die nach der Zahl kommt. Brauchst du z. B., wenn du sowas hast: 123456abcdef. In deinem Fall aber wohl net

    3. Parameter base = Basis, z. B. 10 für Dezimalsystem, 16 für Hexadezimal, 2 für Binär, ...
     
  9. 3. November 2009
    AW: strtoul, was kommt in die Klammern?

    Unter C++ würde man aber eher stringstreams verwenden:

    Code:
    #include <sstream>
    
    void foo() {
     std::stringstream str;
     std::string zahl = "12345";
     unsigned long ergebnis;
    
     str << zahl;
     str >> ergebnis;
    }
    Und noch eine Bitte: Erstell das nächste mal bitte einen neuen Thread wenn du eine andere Frage hast. Und vor allem, lösch nicht deine alte Frage aus dem Thread oO. Der ganze Thread ist jetz fürn ***** weil die ersten Posts überhaupt nicht dazupassen..
     
  10. 3. November 2009
    AW: strtoul, was kommt in die Klammern?

    Sry wollte halt nicht spammen

    -----

    Ich komme mit deiner Antwort nicht zurecht ^^

    Code:
    int main()
    {
     unsigned long sJahr, sMonat, sTag, sStunde, sMinute, sSekunde, Gesamt, aZeit, timeinfo, Jahr, Monat, Tag, Stunde, Minute, Sekunde;
     char p;
    
     
    // Hier werden die Werte aus der TXT gelesen, welche ich per Config.exe Konfiguriert habe.
    
     ifstream ifs ( "config.txt" , ifstream::in );
     vector<string> stringList;
     string tempString;
    
     while (getline(ifs, tempString))
     stringList.push_back(tempString);
    
     ifs.close();
     
     string cJahr = stringList[0];
     string cMonat = stringList[1];
     string cTag = stringList[2];
     string cStunde = stringList[3];
     string cMinute = stringList[4];
     string cSekunde = stringList[5];
    
    
    // Hier convertiere ich von const char in unsigned long;
    
     // Was nicht klappt!
    
    // Hier Berechne ich die Sekunden der angegebenen Zeit
    
     sJahr = Jahr*12*30*24*60*60;
     sMonat = Monat*30*24*60*60;
     sTag = Tag*24*60*60;
     sStunde = Stunde*60*60;
     sMinute = Minute*60;
     sSekunde = Sekunde;
    Das möchte ich im Grunde machen, ist nur ein Teilcode eines "Schuldenrechners". Er soll einfach eine Zeile aus einer TXT nehmen, einer Variablen zuweisen und dann in Sekunden umrechnen. Das ist alles sehr stümperhaft und laienmäßig geschrieben, aber ich versuche halt dem Problem mit dem Wissen herr zu werden, dass ich habe, bzw. von euch zugeschuster bekomme

    Mein Problem ist, dass ich mit Strings im Bereich des Sekundenberechnen nicht Arbeiten kann, da er sonst den Fehler hier ausgibt:

    Code:
    error C2676: Binärer Operator '*': 'std::string' definiert diesen Operator oder eine Konvertierung in einen für den vordefinierten Operator geeigneten Typ nicht
    Deshalb wollte ich den String in einen Datentyp umwandeln, mit dem man Rechnen kann Wie ich jetzt deine Antwort da einfügen soll, keine Ahnung

    Wenn ich zum Beispiel mit strtoul (z.b. Jahr = strtoul(cJahr, p, 10) ) arbeiten möchte dann gibt er folgenden Fehler aus:
    Code:
    error C2664: 'strtoul': Konvertierung des Parameters 1 von 'std::string' in 'const char *' nicht möglich
    Kein benutzerdefinierter Konvertierungsoperator verfügbar, der diese Konvertierung durchführen kann, oder der Operator kann nicht aufgerufen werden
    Ich verstehe es einfach nicht ^^ Habe schon nach den Fehlern gegooglet, leider bezogen sich die dort beschriebenen Fehler auf andere Szenarien
     
  11. 3. November 2009
    AW: strtoul, was kommt in die Klammern?

    versuch mal cJahr.c_str(), dann sollte das klappen
     
  12. 3. November 2009
    AW: strtoul, was kommt in die Klammern?

    Leider derselbe Fehler. Hatte den Befehl auch schon Ausgegraben Hier mal der Fehlercode:

    Code:
    error C2676: Binärer Operator '*': 'std::string' definiert diesen Operator oder eine Konvertierung in einen für den vordefinierten Operator geeigneten Typ nicht
    Der kommt mit dem * nicht zurecht, gibt es denn noch eine andere möglichkeit zu multiplizieren?
     
  13. 3. November 2009
    AW: strtoul, was kommt in die Klammern?

    Hoi,

    das ist eigentlich gar nicht so schwer Lies dir mal was zu den Streams in C++ durch (c++.de :: Ein- und Ausgabe in C++ - IO-Streams, iostream - C++ Reference). Dann verstehst du auch den Code:
    Code:
    #include <sstream>
    #include <string>
    #include <iostream>
    
    unsigned long convertString(const std::string &str) {
     std::stringstream s;
     unsigned long ergebnis;
    
     s << str;
     s >> ergebnis;
     return ergebnis;
    }
    
    int main() {
     std::string zahl = "12345";
     unsigned long zahl2 = convertString(zahl);
    
     std::cout << zahl2 << std::endl;
    }
    Hier noch bissl mehr Text: 404 Page Not Found
     
  14. 3. November 2009
    AW: strtoul, was kommt in die Klammern?

    Ok das scheint zu funzen. Endlich Ich danke euch allen. Wenn ich noch ne Frage habe, werde ich mich melden
     
  15. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.