(C ++)数组中的特定值

时间:2011-11-05 17:35:01

标签: c++ arrays

我不确定如何标题我的问题,但是这里有。我正在测试一些功能,我遇到了麻烦。

我想知道的是如何设置“for”或“if”语句只将值放在符合条件的数组中?例如,找到一个数字的每个除数,但只将因子放在数组中。

任何帮助都会被喜爱,如果需要可以提供源代码:)。是的,我是新人,所以要温柔!

#include <iostream>
using namespace std;

int main(){
    int n;
    int counter = 1;
    cout << "What number would you like to use? ";
    cin >> n;
    int DiviArray[n];
    for (int k=0,j=1;k<n;k++,j++)
    {
        DiviArray[k] = n-k;
    }
    int k = 3;
    int factn[n];
    cout << "Factors of " << n << ": " << endl;

    for (int i=0, j=1;i<n;i++,j++)
    {
        factn[i] = n/DiviArray[i];
        if(factn[i]*DiviArray[i]==n)
        {
            cout << counter << ". " << factn[i] << " x " << DiviArray[i] << endl;
            counter++;
        }
    }
    return 0;
}
编辑:决定使用矢量,不确定我是否可以使用它,但感谢您的反馈:)

2 个答案:

答案 0 :(得分:1)

由于您事先并不知道有多少值符合条件,因此您应该使用std::vector

作为一项优势,它会跟踪您已添加的元素数量,因此push_back将始终使用下一个可用的索引。

这也解决了

cin >> n;
int DiviArray[n];

这不是合法的C ++。

答案 1 :(得分:0)

如果您只想将值放入与条件匹配的数组中,则只应在条件匹配时将数字放入数组中。为此,将数字放入数组的语句必须位于条件的if块内。我希望我不需要解释原因:)。

这是你的程序中唯一一个你确实想要两个索引的时间:一个在循环中每次递增(计算运行过程的次数),另一个只在你放一个时增加数组中的数字(以确定下一个数字的位置)。在其他任何地方,你已经创建了一个完全无用的j变量(由于没有实际使用该值的代码,只有代码来设置它,因此无用性应该很明显。)