2016-04-20 31 views
0

Wie wandelt man eine Zeichenfolge wie 3 word 12 with word in eine int um, die nur die Nummer 312 enthält, ohne stoi in C++ zu verwenden? Mein Codeblock gab mir einen Fehler stoi is not a member of std, als ich versuchte, es zu benutzen.C++ Zeichenfolge mit Wort und Zahl in Zahl umwandeln

Vielen Dank im Voraus!

+2

Bitte poste deinen Code, vorzugsweise ein [minimales, vollständiges und verifizierbares Beispiel] (http://stackoverflow.com/help/mcve). –

+0

Verwenden Sie '-std = C++ 14' Compiler-Schalter, und aktualisieren Sie den Compiler zu [Mingw-W64] (http://mingw-w64.org) (der Standard, mit dem es kommt, ist Mist) –

Antwort

1

Gehen Sie durch die Zeile und überspringen Sie nicht-stellige Symbole. Und für Ziffern verwenden Sie -'0' Umwandlung und *10 Shift-Ansatz. Z.B .:

#include <stdio.h> 
#include <ctype.h> 
//or cctype to use isdigit() 
#include <string.h> 
//or cstring to use strlen() 

int main() 
{ 
    char str[] = "3 word 12 with word"; // can be any string 
    int result = 0; // to store resulting number 
    // begin of solution 
    for (int i = 0; i < strlen(str); i++) 
    { 
     if (isdigit(str[i])) 
     { 
      result *= 10; 
      result += str[i] - int('0'); 
     } 
    } 
    // end of solution 
    printf("%d\n", result); 
    return 0; 
} 
0

Unter der Annahme, dass s Ihre erste Zeichenfolge ist.

int toInt(string s) { 
    string digits; 
    for(size_t i = 0; i < s.size(); i++) 
     if(s[i] >= '0' && s[i] <= '9') 
      digits.push_back(s[i]); 

    int res = 0; 
    for(size_t i = 0; i < digits.size(); i++) 
     res = res * 10 + digits[i] - '0'; 
    return res; 
} 

Führende Nullen sind kein Problem. Beachten Sie jedoch, dass es möglich ist, einen Überlauf zu erhalten, wenn die resultierende Zeichenfolge digits eine große Zahl enthält.

1

Gleiche Idee wie in VolAnd's answer. Nur, weil die Frage mit c++ getagged ist, einige STL-Sachen verwendend.

#include <iostream> 
#include <numeric> 
#include <string> 
using namespace std; 

int main(){ 
    std::string input("3 word 12 with word"); 

    int num = std::accumulate(input.begin(), input.end(), 0, 
      [](int val, const char elem) { 
       if (isdigit(elem)) { 
        val = val*10 + (elem-'0'); 
       } 
       return val; 
     } 
    ); 

    std::cout << num << std::endl; 
    return 0; 
} 

siehe http://en.cppreference.com/w/cpp/algorithm/accumulate

Anmerkung: Es wird etwas interessanter, wenn Sie ein Minuszeichen zulassen wollen ....

Und mit boost::adaptors::filter(rng, pred) auf diesen einen Spaß machen würde, aber übertreiben es leicht ;-)

Verwandte Themen