c++ - dev - Cómo convertir QString a int?
parse int c++ (7)
Tengo un QString
en mis fuentes. Entonces necesito convertirlo a entero sin "Kb".
Intenté Abcd.toInt()
pero no funciona.
QString Abcd = "123.5 Kb"
¡No olvide verificar si la conversión fue exitosa!
bool ok;
auto str= tr("1337");
str.toDouble(&ok); // returns 1337.0, ok set to true
auto strr= tr("LEET");
strr.toDouble(&ok); // returns 0.0, ok set to false
Como sugerencia, también puede usar QChar::digitValue()
para obtener el valor numérico del dígito. Por ejemplo:
for (int var = 0; var < myString.length(); ++var) {
bool ok;
if (myString.at(var).isDigit()){
int digit = myString.at(var).digitValue();
//DO SOMETHING HERE WITH THE DIGIT
}
}
En los comentarios:
sscanf(Abcd, "%f %s", &f,&s);
Da un error
Esta es la manera correcta:
sscanf(Abcd, "%f %s", &f,qPrintable(s));
La cadena que tienes aquí contiene un número de punto flotante con una unidad. Recomiendo dividir esa cadena en una parte de número y unidad con QString::split()
.
Luego use toDouble()
para obtener un número de punto flotante y redondee como desee.
No tienes todos los caracteres de dígitos en tu cadena. Entonces debes dividir por espacio
QString Abcd = "123.5 Kb";
Abcd.split(" ")[0].toInt(); //convert the first part to Int
Abcd.split(" ")[0].toDouble(); //convert the first part to double
Abcd.split(" ")[0].toFloat(); //convert the first part to float
Actualización : estoy actualizando una respuesta anterior. Esa fue una respuesta directa a la pregunta específica, con una suposición estricta. Sin embargo, como lo señala @DomTomCat en los comentarios y @Mikhail en respuesta, en general, uno siempre debe verificar si la operación fue exitosa o no. Entonces, es necesario usar una bandera booleana.
bool flag;
double v = Abcd.split(" ")[0].toDouble(&flag);
if(flag){
// use v
}
Además, si está tomando esa cadena como entrada del usuario, entonces también debería dudar si la cadena es realmente divisible con espacio. Si existe la posibilidad de que la suposición pueda romperse, entonces es más preferible un verificador de expresiones regulares. Una expresión regular como la siguiente extraerá el valor del punto flotante y el carácter de prefijo de ''b''. Entonces puede convertir de manera segura las cadenas capturadas en el doble.
([0-9]*/.?[0-9]+)/s+(/w[bB])
Puede tener una función de utilidad como la siguiente
QPair<double, QString> split_size_str(const QString& str){
QRegExp regex("([0-9]*//.?[0-9]+)//s+(//w[bB])");
int pos = regex.indexIn(str);
QStringList captures = regex.capturedTexts();
if(captures.count() > 1){
double value = captures[1].toDouble(); // should succeed as regex matched
QString unit = captures[2]; // should succeed as regex matched
return qMakePair(value, unit);
}
return qMakePair(0.0f, QString());
}
Puedes usar:
QString str = "10";
int n = str.toInt();
Salida:
n = 10
Utilice .toInt()
para int .toFloat()
para float y .toDouble()
para double