La conversion d'un std::string bool
Quel est le meilleur moyen de convertir un std::string bool? Je suis l'appel d'une fonction qui retourne "0" ou "1", et j'ai besoin d'une solution propre pour le transformer en une valeur booléenne.
Vous devez vous connecter pour publier un commentaire.
Il sera probablement trop pour vous, mais je préfère utiliser boost::lexical_cast
boost::bad_lexical_cast
.Je suis surpris que personne n'a mentionné ceci:
ou
Soit vous vous souciez de la possibilité d'une valeur invalide en retour ou vous n'avez pas. La plupart des réponses sont dans le juste milieu, la capture de certaines chaînes en plus de "0" et "1", peut-être la rationalisation sur la façon dont ils doivent être convertis, peut-être lancer une exception. D'entrée non valide ne peut pas présenter un permis de sortie, et vous ne devriez pas essayer de l'accepter.
Si vous ne vous souciez pas des invalides retourne, utilisez
s[0] == '1'
. C'est super simple et évident. Si vous devez justifier de sa tolérance à quelqu'un, dire qu'il convertit l'entrée non valide pour de faux, et la chaîne vide est susceptible d'être un seul\0
dans votre fichier STL de mise en œuvre de sorte qu'il est raisonnablement stable.s == "1"
est également bon, maiss != "0"
semble obtus à moi et fait invalid => true.Si tu fais des soins sur les erreurs (et devrait), l'utilisation
Ce prises TOUTES les erreurs, c'est aussi carrément évident et simple pour quelqu'un qui connait un brin de C, et rien ne pourra effectuer plus rapidement.
Il est également std::stoi en c++11:
bool valeur = std::stoi(someString.c_str());
Écrire une fonction:
C'est le plus simple des chose qui pourrait fonctionner, mais vous devez vous poser:
Je suis sûr qu'il ya d'autres - c'est la joie de la conception d'API!
at
que le contrôle est très propre.at()
.J'utiliserais ce qui fait ce que vous voulez, et attrape l'erreur de cas.
Je changerais le laid fonction qui retourne cette chaîne dans la première place. C'est ce que bool est pour.
std::string
de toutes les choses pour un retour boolean?Essayez ceci:
Voici une manière similaire à Kyle, sauf dans un cas il gère les zéros et des trucs:
Vous pourriez toujours enrouler la chaîne renvoyée dans une classe qui gère le concept de booléenne chaînes:
Appeler quelque chose comme ceci:
Qui lancera
invalid_argument
si la règle de la"0"
et"1"
est violé.DavidL réponse est le meilleur, mais je me retrouve à vouloir soutenir les deux formes de booléenne entrée en même temps. Ainsi, une variation mineure sur le thème (nommé d'après
std::stoi
):Cette charge "0", "1", "true" et "false" comme des entrées valides. Malheureusement, je ne peux pas comprendre un portable de façon à soutenir aussi "VRAI" et "FAUX"