如何比较数组的整数与'int'类型的另一个变量?

时间:2016-02-25 11:20:26

标签: c++

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;


int main() {
vector<int> v;
int N,S,P,Q,data=0,j=0;
cin >> N >> S >> P >> Q;
if((0<N<=10^8)&&(0<S,P,Q<2^31)){
    int arr[N];
    for(int i=0; i<N; i++)
       arr[i]=arr[i-1]*P+Q; 
    data=arr[0];
    for(int i=1; i<N; i++){
//!request for member 'compare' in 'arr[i]', which is of non-class type 'int'
        if(arr[i].compare(data)==0)
            j++;
        else
            data=arr[i];
    }
    cout<<j;    
}
}

当我尝试运行上面的代码时,我收到了上面代码中提到的错误。错误是什么意思?有谁能详细解释一下我?

2 个答案:

答案 0 :(得分:2)

要比较C ++中的两个数字,您可以使用==if (arr[i] == data)就是您想要的。

此外,arr[i-1]在循环的第一次迭代中的行为是 undefined 。解决这个问题。

int arr[N];是一个可变长度数组,不是标准C ++,而是编译器扩展。请改用std::vector

最后(0<N<=10^8)&&(0<S,P,Q<2^31),虽然语法正确但没有做你认为它正在做的事情。阅读逗号运算符。你想写一些类似0 < N && N < 10^8 && 0 < S && 0 < P && Q < 2^31的东西,假设你知道^ 不是 C ++中的指数运算符

答案 1 :(得分:1)

声明

 if((0<N<=10^8)&&(0<S,P,Q<2^31))

甚至没有达到您的期望。

比较运算符<<=等是二元运算符,它一次比较两个操作数。你不能像检查范围一样链接它们。并且您也无法检查多个值(S,P,Q) - 您需要一次执行所有单个测试,两个操作数。

同样^是一个按位异或。 10^8 10 8未被^提升。更好的是,(0<N<=10^8)的优先级低于比较运算符,因此(((0 < N) <= 10) ^ 8)在功能上等同于gwmi win32_logicaldisk

我强烈建议你做一些你显然没有烦恼的事情 - 阅读关于C ++的基本基础文本,并理解表达式是如何工作的。