在 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
的轉換方法則更直觀和簡潔。選擇哪種方法取決于你的具體需求和偏好。