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-24 13:19:27 浏览: 6
这是因为在将expression按照"sin("进行分割后,list1[1]中只剩下"2x)+1"这段字符串,没有“x”了,因此在使用list2[1]时超出了数组范围。你可以将list2的获取方式改为:QStringList list2= list1[1].split(")");,然后再将list2[0]中的"x"去掉即可。
相关问题
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]是多少,使用list[1]会超越数组范围吗
在这段代码中,当 `expression` 为 `2sin(2x)+1` 时,`list2[1]` 会超出数组范围,因为 `list2` 中只有两个元素:`list2[0]` 是 `"2"`,`list2[1]` 是 `"x)"`。可以使用`if`语句检查`list2`中是否有第三个元素,如果没有,则说明该项是常数项而非常数值,可以将其设为0。修改后的代码如下:
```cpp
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 = 0; // 初始化常数项为0
if (list2.length() > 1) { // 如果有第三个元素,则说明该项是常数值
c = list2[1].toDouble();
}
xValues.append(i);
yValues.append(aqSin(bi)+c);
}
```