0
我有一個QTableWidget,其中用戶輸入各種樣式的複雜數字。 例如,複數(-15 + 8.14i)可以寫成像:如何從用戶輸入中獲取數據?
-15 + 8.14i
-15 + 8.14j
-15 + J 8,14
-15+ i8,14
我也可以Ĵ! 這兩個值都可能很大(它們被保存爲雙倍),也是負值。它們可以用「,」和「」來書寫。 (所以3.14和3,14是相等的)。當用戶錯誤地輸入號碼時應該有錯誤信息。
CKomplex fromString(QString str) { // ckomplex is my custom class for complex numbers
double numReal, numImag;
QString strNew = "";
// delete all spaces
for (int i= 0; i< str.length(); i++) {
if (!str[i].isSpace()) {
strNew += str[i];
}
}
QString part1 = "";
int index;
// get the first number
for (int i= 0; i < strNew.length(); i++) { // iterate string
if (strNew[i] != '+' && strNew[i] != '-') {
part1 += strNew[i];
} else { // e.g.: 5 + 3j -> the loop is at the "+"
if (i != 0) {
index = i; // save index at "+" to start for next number
break;
}
}
}
numReal = part1.toDouble();
QString part2 = "";
// get the second number
for (int i= index; i < strNew.length(); i++) {
if (strNew[i].isDigit() || strNew[i] == '+' || strNew[i] == '-' || strNew[i] == '.' || strNew[i] == ',') { // ignore j or i
part2 += strNew[i];
}
}
numImag = part2.toDouble();
return CKomplex(numReal, numImag);
}
這對基本輸入無效。但不是很快,不可讀或不實用。它只包含幾個輸入的可能性(像「-3-5,14」這樣的東西不起作用)。有沒有更簡單的方法來將字符串轉換爲複數,而沒有太多的循環和變量?
感謝您的代碼, –
**什麼的std :: istringstream ISS(STR) ;做? (sry for double post) –
YVW它從'std :: string'創建一個'std :: istringstream',然後使用regex迭代器進行迭代。 – wally