1
votes

C ++ convertir une chaîne en int

Utilisé la méthode stoi () pour convertir une chaîne en int, mais elle se convertit en int même s'il y a un alphabet.

string str1 = "45";
string str2 = "31337 test"; 

int myint1 = stoi(str1); // 45
int myint2 = stoi(str2); // 31337

str2 est converti en int, mais je ne veux pas cette conversion car il a l'alphabet. S'il existe un moyen d'attraper ou d'empêcher cette conversion.


1 commentaires

Si vous lisez la documentation de std :: stoi , vous trouverez peut-être quelque chose d'utile.


4 Réponses :


4
votes

Vous pouvez vérifier le nombre de caractères traités.

string str2 = "31337 test"; 
std::size_t num;

int myint2 = stoi(str2, &num); // 31337
//                      ^^^^

// num (the number of characters processed) would be 5
if (num != str2.length()) {
    ...
}


0 commentaires

0
votes

Depuis la page de référence stoi

string str2 = "31337 test"; 
string::size_type sz;   // alias of size_t
int myint2 = stoi(str2,&sz);


0 commentaires

3
votes

Vous pouvez utiliser la fonctionnalité de flux pour lire un nombre et vous assurer qu'il n'y a rien d'autre sur le flux.

if ((stream >> std::setbase(8) >> val) && !(stream >> x)) {
    // We read an integer from the stream.
    // **and** there is nothing else on the stream
    // (except white space)
}

Utile car vous pouvez également l'utiliser avec n'importe quelle base particulière: p >

std::string        str = "31337 test"; 
std::stringstream  stream(str);

int   val;
char  x;
if ((stream >> val) && !(stream >> x)) {
    // We read an integer from the stream.
    // **and** there is nothing else on the stream
    // (except white space)
}


0 commentaires

1
votes

Si je vous comprends bien, vous ne voulez pas que la conversion se produise si autre que des nombres présents dans la chaîne.

dans ce cas, vous pouvez utiliser ci-dessous

int convertOnlyWhenNumbersPresentInString( std::string str ){

    if (std::all_of( str.begin(), str.end(), ::isdigit ))
    {
        return std::stoi( str );

    } else
    {
        return -1;
    }  
}

int main() 
{

    std::string str1 = "45";
    std::string str2 = "31337 test";

    std::cout << convertOnlyWhenNumbersPresentInString( str1 ) << std::endl; // prints 45
    std::cout << convertOnlyWhenNumbersPresentInString( str2 ) << std::endl; // prints -1
}

p>


0 commentaires