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.
4 Réponses :
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()) { ... }
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);
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) }
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>
Si vous lisez la documentation de
std :: stoi
, vous trouverez peut-être quelque chose d'utile.