【发布时间】:2016-12-28 16:33:43
【问题描述】:
我有一个 QTableWidget,用户可以在其中输入各种样式的复数。 例如,复数 (-15 + 8.14i) 可以写成:
-15 + 8.14i
-15+8.14j
-15 +j 8,14
-15+ i8,14
i也可以是j! 这两个值都可以很大(它们被保存为双精度值),也可以为负值。它们可以写成“,”和“。” (所以 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”之类的东西不起作用)。有没有更简单的方法可以将字符串转换为复数而无需那么多循环和变量?
【问题讨论】:
标签: c++ input qstring qtablewidgetitem