else if (expression.contains("sin", Qt::CaseInsensitive)) { //正弦函数 QStringList list1 = expression.split("sin("); double a = list1[0].toDouble(); QStringList list2= list1[1].split("x)"); double b = list2[0].toDouble(); double c = list2[0].toDouble(); qDebug()<<list2[1]; xValues.append(i); yValues.append(aqSin(bi)+c);该段代码中expression是“2sin(2x)+1”,为什么在运行时说使用lis2[1]超出了数组范围
时间: 2024-01-22 16:20:46 浏览: 40
在你的代码中,列表list2只有两个元素:第一个是包含函数参数的字符串(例如"2x"),第二个是空字符串。因此,当你尝试访问list2[1]时,会出现“超出范围”的错误。
要解决这个问题,你可以检查list2的长度,确保它大于1,然后再尝试访问list2[1]。例如:
```cpp
QStringList list2= list1[1].split("x)");
double b = list2[0].toDouble();
double c = list2[1].toDouble(); // 检查list2的长度,确保它大于1
qDebug()<<list2[1];
if (list2.length() > 1) {
yValues.append(aqSin(bi)+c);
} else {
// 处理长度不足的情况
}
```
这应该可以避免超出数组范围的错误。
相关问题
else if (expression.contains("sin", Qt::CaseInsensitive)) { //正弦函数 QStringList list1 = expression.split("sin("); double a = list1[0].toDouble(); QStringList list2= list1[1].split("x)"); double b = list2[0].toDouble(); double c = list2[1].toDouble(); xValues.append(i); yValues.append(aqSin(bi)+c);在这段代码中expression是2sin(2x)+1,那么list2[1]是多少
在这段代码中,当 `expression` 为 `2sin(2x)+1` 时,`list2[1]` 应该是空字符串。
原因是,`expression.split("sin(")` 会将 `expression` 拆分为两个部分:`2` 和 `2x)+1`。而后续的 `list2= list1[1].split("x)")` 会将 `2x)+1` 拆分为两个部分:`2` 和空字符串。
因此,`c` 的值应该为 0。
阅读全文