769 Stimmen

Wie kann ich einen std::string in int umwandeln?

Ich möchte einen String in einen int konvertieren, und ich meine nicht ASCII-Codes.

Für einen schnellen Durchlauf wird uns eine Gleichung als String übergeben. Wir sollen sie aufschlüsseln, richtig formatieren und die linearen Gleichungen lösen. Ich bin nicht in der Lage, eine Zeichenkette in eine Zahl zu konvertieren.

Ich weiß, dass die Zeichenfolge entweder im Format (-5) oder (25) usw. sein wird, also ist es definitiv ein int. Aber wie extrahieren wir das aus einem String?

Eine Möglichkeit, die ich dachte, ist das Ausführen einer for/while-Schleife durch die Zeichenfolge, überprüfen Sie für eine Ziffer, extrahieren Sie alle Ziffern nach, dass und dann zu sehen, wenn es eine führende '-', wenn es ist, multiplizieren Sie die int mit -1.

Für ein so kleines Problem scheint es allerdings etwas zu kompliziert zu sein. Irgendwelche Ideen?

-2voto

Hansimov Punkte 499

Einzeilige Version: long n = strtol(s.c_str(), NULL, base); .

( s ist die Zeichenkette, und base ist ein int wie 2, 8, 10, 16).

Sie können sich beziehen auf dieser Link für weitere Informationen über strtol .


Die Kernidee ist die Verwendung von strtol Funktion, die in cstdlib .

Seit strtol nur Griffe mit char Array, müssen wir konvertieren string à char Array. Sie können sich auf dieser Link .

Ein Beispiel:

#include <iostream>
#include <string>   // string type
#include <bitset>   // bitset type used in the output

int main(){
    s = "1111000001011010";
    long t = strtol(s.c_str(), NULL, 2); // 2 is the base which parse the string

    cout << s << endl;
    cout << t << endl;
    cout << hex << t << endl;
    cout << bitset<16> (t) << endl;

    return 0;
}

was zu einer Ausgabe führt:

1111000001011010
61530
f05a
1111000001011010

-2voto

nooB Punkte 13

Es gibt eine weitere einfache Möglichkeit: Nehmen wir an, Sie haben ein Zeichen wie c='4' Daher können Sie einen der folgenden Schritte durchführen:

1. : int q

q=(int) c ; (q is now 52 in ascii table ) . q=q-48; remember that adding 48 to digits is their ascii code .

der zweite Weg:

q=c-'0'; the same , character '0' means 48

-2voto

scienclocode Punkte 1

Ich denke, dass die Umstellung von int à std::string oder umgekehrt benötigt einige spezielle Funktionen wie std::stoi() aber wenn Sie eine double in eine string verwenden. to_string() (NICHT C#. C# ist .ToString() nicht to_string())

-5voto

name Punkte 7

Wenn Sie einen harten Code wollen :)

bool strCanBeInt(std::string string){
    for (char n : string) {
        if (n != '0' && n != '1' && n != '2' && n != '3' && n != '4' && n != '5'
            && n != '6' && n != '7' && n != '8' && n != '9') {
            return false;
        }
    }
    return true;
}

int strToInt(std::string string) {
    int integer = 0;
    int numInt;
    for (char n : string) {
        if(n == '0') numInt = 0;
        if(n == '1') numInt = 1;
        if(n == '2') numInt = 2;
        if(n == '3') numInt = 3;
        if(n == '4') numInt = 4;
        if(n == '5') numInt = 5;
        if(n == '6') numInt = 6;
        if(n == '7') numInt = 7;
        if(n == '8') numInt = 8;
        if(n == '9') numInt = 9;
        if (integer){
            integer *= 10;
        }
        integer += numInt;
    }
    return integer;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X