在 Qt 中,可以使用多种方法来判断字符串是否为数字、整数或浮点数。Qt 提供了一些方便的字符串和数值处理函数,可以帮助你实现这些判断。以下是几种常见的方法:
1. 使用 QRegularExpression
Qt 提供了 QRegularExpression
类,可以用来匹配字符串模式。
判断是否为数字(整数或浮点数)
#include <QRegularExpression>
#include <QString>
#include <QDebug>bool isNumber(const QString &str) {QRegularExpression re("^-?\\d+(\\.\\d+)?$");QRegularExpressionMatch match = re.match(str);return match.hasMatch();
}int main() {QString testStr1 = "123";QString testStr2 = "-456.78";QString testStr3 = "abc";qDebug() << "Is testStr1 a number?" << isNumber(testStr1); // trueqDebug() << "Is testStr2 a number?" << isNumber(testStr2); // trueqDebug() << "Is testStr3 a number?" << isNumber(testStr3); // falsereturn 0;
}
判断是否为整数
bool isInteger(const QString &str) {QRegularExpression re("^-?\\d+$");QRegularExpressionMatch match = re.match(str);return match.hasMatch();
}int main() {QString testStr1 = "123";QString testStr2 = "-456";QString testStr3 = "456.78";QString testStr4 = "abc";qDebug() << "Is testStr1 an integer?" << isInteger(testStr1); // trueqDebug() << "Is testStr2 an integer?" << isInteger(testStr2); // trueqDebug() << "Is testStr3 an integer?" << isInteger(testStr3); // falseqDebug() << "Is testStr4 an integer?" << isInteger(testStr4); // falsereturn 0;
}
判断是否为浮点数
bool isFloat(const QString &str) {QRegularExpression re("^-?\\d+\\.\\d+$");QRegularExpressionMatch match = re.match(str);return match.hasMatch();
}int main() {QString testStr1 = "123.45";QString testStr2 = "-456.78";QString testStr3 = "123";QString testStr4 = "abc";qDebug() << "Is testStr1 a float?" << isFloat(testStr1); // trueqDebug() << "Is testStr2 a float?" << isFloat(testStr2); // trueqDebug() << "Is testStr3 a float?" << isFloat(testStr3); // falseqDebug() << "Is testStr4 a float?" << isFloat(testStr4); // falsereturn 0;
}
2. 使用 QString 的 toInt 和 toDouble 方法
另一种方法是尝试将字符串转换为整数或浮点数,并检查转换是否成功。
判断是否为数字(整数或浮点数)
bool isNumber(const QString &str) {bool ok;str.toDouble(&ok);return ok || str.toInt(&ok) && ok;
}int main() {QString testStr1 = "123";QString testStr2 = "-456.78";QString testStr3 = "abc";qDebug() << "Is testStr1 a number?" << isNumber(testStr1); // trueqDebug() << "Is testStr2 a number?" << isNumber(testStr2); // trueqDebug() << "Is testStr3 a number?" << isNumber(testStr3); // falsereturn 0;
}
判断是否为整数
bool isInteger(const QString &str) {bool ok;return str.toInt(&ok) && ok;
}int main() {QString testStr1 = "123";QString testStr2 = "-456";QString testStr3 = "456.78";QString testStr4 = "abc";qDebug() << "Is testStr1 an integer?" << isInteger(testStr1); // trueqDebug() << "Is testStr2 an integer?" << isInteger(testStr2); // trueqDebug() << "Is testStr3 an integer?" << isInteger(testStr3); // falseqDebug() << "Is testStr4 an integer?" << isInteger(testStr4); // falsereturn 0;
}
判断是否为浮点数
bool isFloat(const QString &str) {bool ok;return str.toDouble(&ok) && ok;
}int main() {QString testStr1 = "123.45";QString testStr2 = "-456.78";QString testStr3 = "123";QString testStr4 = "abc";qDebug() << "Is testStr1 a float?" << isFloat(testStr1); // trueqDebug() << "Is testStr2 a float?" << isFloat(testStr2); // trueqDebug() << "Is testStr3 a float?" << isFloat(testStr3); // falseqDebug() << "Is testStr4 a float?" << isFloat(testStr4); // falsereturn 0;
}
这两种方法各有优缺点,使用正则表达式可以精确匹配字符串模式,而使用 QString
的转换方法则更直观和简洁。选择哪种方法取决于你的具体需求和偏好。