online ejemplos descargar definicion caracteristicas c++

ejemplos - c++ online



c++ std:: string a booleano (5)

Actualmente estoy leyendo un archivo ini con un par clave / valor. es decir

isValid = true

Cuando obtenga el par clave / valor, necesito convertir una cadena de ''true'' en un bool. Sin usar boost, ¿cuál sería la mejor manera de hacer esto?

Sé que puedo comparar una cadena en el valor ( "true" , "false" ) pero me gustaría hacer la conversión sin que la cadena en el archivo ini sea sensible a mayúsculas y minúsculas.

Gracias


Escriba en minúsculas la cadena iterando la cadena y llamando a tolower en los carachters, luego compárela con "true" o "false" , si su única preocupación es la carcasa.

for (std::string::iterator iter = myString.begin(); iter != myString.end(); iter++) *iter = tolower(*iter);



Otra solución sería usar tolower() para obtener una versión minúscula de la cadena y luego comparar o usar secuencias de cadenas:

#include <sstream> #include <string> #include <iomanip> #include <algorithm> #include <cctype> bool to_bool(std::string str) { std::transform(str.begin(), str.end(), str.begin(), ::tolower); std::istringstream is(str); bool b; is >> std::boolalpha >> b; return b; } // ... bool b = to_bool("tRuE");


Si no puedes usar boost, prueba con strcasecmp :

#include <cstring> std::string value = "TrUe"; bool isTrue = (strcasecmp("true",value.c_str()) == 0);


#include <string> #include <strings.h> #include <cstdlib> #include <iostream> bool string2bool (const std::string & v) { return !v.empty () && (strcasecmp (v.c_str (), "true") == 0 || atoi (v.c_str ()) != 0); } int main () { std::string s; std::cout << "Please enter string: " << std::flush; std::cin >> s; std::cout << "This is " << (string2bool (s) ? "true" : "false") << std::endl; }

Un ejemplo de entrada y salida:

$ ./test Please enter string: 0 This is false $ ./test Please enter string: 1 This is true $ ./test Please enter string: 3 This is true $ ./test Please enter string: TRuE This is true $