parse dev convertir convert como c++ string qt int qstring

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 } }

Fuente: Convertir un elemento de un QString a int


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

toInt();