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);
Las sugerencias para comparaciones de cadenas insensibles a mayúsculas y minúsculas en cadenas C ++ se pueden encontrar aquí: Comparación de cadenas insensibles a mayúsculas y minúsculas en C ++
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
$