C++ 使用atoi(';int*';类型的“参数”与类型';const char*&';)和添加数组时出错
我试图创建一个程序,从文件中提取多项式方程,并将两个多项式相加、相减或相乘(取决于中间操作数)。然而,我得到了两个编译器错误,我不能完全理解 第一种情况发生在这里:C++ 使用atoi(';int*';类型的“参数”与类型';const char*&';)和添加数组时出错,c++,compiler-errors,C++,Compiler Errors,我试图创建一个程序,从文件中提取多项式方程,并将两个多项式相加、相减或相乘(取决于中间操作数)。然而,我得到了两个编译器错误,我不能完全理解 第一种情况发生在这里: int** getPolynomial(string polynomial, int &count, string Exponent[], string Coefficient[], int polyArray[][1]){ for (int i = 0; i<100; i++){ for (int n = 0
int** getPolynomial(string polynomial, int &count, string Exponent[], string Coefficient[], int polyArray[][1]){
for (int i = 0; i<100; i++){
for (int n = 0; n<100; n++){
Exponent[n] = atoi(polyArray[n][1]);
}
Coefficient[i] = atoi(polyArray[i][0]);
}
}
在行countResult[q][0]=左[q][0]+右[q][0]代码>,其中编译器注意到第一个q“表达式必须具有指向对象类型的指针”,尽管我看不出将q设为指针会有什么帮助
此处的完整代码:。在此问题上的任何帮助都将不胜感激。您的类型有问题:
返回一个int
,因此您需要将指数
和系数
更改为int[]
,或者您需要停止使用atoi
直接赋值
CountResult
是一个int&
,这意味着它不能被索引。您需要将其设置为int[][]
,才能按当前状态使用它
如果没有一些指导,这篇文章将是不完整的:用s来表示你的多项式。只要多项式相对密集,就可以使用索引来表示指数,使用值来表示系数
现在让我们假设我们得到了string polyArray[][]
,它包含我们的幂和它们的系数,分别位于辅助数组的0和1位置。我们想把它读入表示多项式的向量foo。我们可以这样做:
for(auto& i : polyArray)
if(i[0] > size(foo)){
foo.resize(i[0]);
}
foo[i[0]] = i[1];
}
现在让我们假设有两个多项式要求和,比如说向量左
和向量右
,我们要把它们求和成一个新构造的多项式:向量计数结果
,我们可以这样做:
if(size(left) > size(right)) {
countResult.reserve(size(left));
transform(cbegin(right), cend(right), cbegin(left), begin(countResult), plus<int>());
countResult.insert(end(countResult), next(cbegin(left), size(right)), cend(left));
} else {
countResult.reserve(size(right));
transform(cbegin(left), cend(left), cbegin(right), becing(countResult), plus<int>());
countResult.insert(end(countResult), next(cbegin(right), size(left)), cend(right));
}
if(尺寸(左)>尺寸(右)){
countResult.reserve(大小(左));
转换(cbegin(右)、cend(右)、cbegin(左)、begin(countResult)、plus();
insert(end(countResult)、next(cbegin(左)、size(右)、cend(左));
}否则{
countResult.reserve(大小(右));
变换(cbegin(左)、cend(左)、cbegin(右)、becing(countResult)、plus());
insert(end(countResult)、next(cbegin(右)、size(左)、cend(右));
}
错误信息非常清楚,不是吗<代码>多阵列[i][0]
不是所需的const char*
类型。但我正在尝试将数组“cofficient”中的字符串转换为数组“polyArray”中的整数。两个数组的位置是否混淆了?赋值运算符将右边的值赋值给左边的var。这是一种基本的东西。听起来你在和风车作战:-P.停止使用原始数组和指针。仔细看看。我想我可以利用这些信息来解决当我有字符串时需要使用const char*的问题。你知道countResult中的q是怎么回事吗?显然,它是一个指针?我试着在for循环中简单地将其更改为一个,但正如预期的那样,由于循环是如何构建的,这确实没有帮助。
if(size(left) > size(right)) {
countResult.reserve(size(left));
transform(cbegin(right), cend(right), cbegin(left), begin(countResult), plus<int>());
countResult.insert(end(countResult), next(cbegin(left), size(right)), cend(left));
} else {
countResult.reserve(size(right));
transform(cbegin(left), cend(left), cbegin(right), becing(countResult), plus<int>());
countResult.insert(end(countResult), next(cbegin(right), size(left)), cend(right));
}