如何获取数组中值的具体位置,而不是值

时间:2014-05-06 17:20:22

标签: c++ arrays

问题本身很简单。

这是我的代码:

`

#include <iostream>
#include <array>
using namespace std;
int const SIZE = 5;



int main(){

    string flav[SIZE] = {"Mild", "Medium", "Sweet", "Hot", "Zesty"};
    int cnt[SIZE];
    int total=0;
    int max=0;

    for(int i = 0; i <5; i++)
    {
        cout<<"Please Input the number of jars sold for "<<flav[i]<<"."<<endl;
        cin>>cnt[i];
        total = cnt[i] + total;
    }

    cout << "The total amount of Salsa sold was "<<total<<" units."<<endl;

    for(int i = 1; i<SIZE; i++)
    {
        if(cnt[i] > max)
            max = cnt.at[i];
    }

    cout <<"The highest selling flavor was "<< flav[max]<<endl;




}`

我想将max分配给数组中最高值的位置,而不是值本身。

我在这里做错了什么?

感谢。

编辑:酷。新问题。啊。

4 个答案:

答案 0 :(得分:1)

int maxvalue = cnt[0];
int maxidx = 0;
for(int i = 1; i < SIZE; i++)
{
    if (cnt[i] > maxvalue)
    {
        maxvalue = cnt[i];
        maxidx = i;
    }
}

更新:至于您的其他错误,cnt不是classstruct,并且没有at[]成员。它只是一个普通的普通数组,因此您需要将cnt.at[i]替换为cnt[i]

您还缺少循环内if语句所需的大括号,因此您始终无条件地在每个循环交互中设置iMaxIdx = i

for(int i = 1; i<SIZE; i++)
{
    if(cnt[i] > max) // <-- no braces
        max = cnt.at[i]; // <-- only executed on higher values
        iMaxIdx = i; // <-- always executed unconditionally
}

因此,当循环退出时,iMaxIdx 总是SIZE-1。您需要添加大括号,以便仅在找到更高值的迭代中更新iMaxIdx,如上例所示:

for(int i = 1; i<SIZE; i++)
{
    if(cnt[i] > max)
    { // <-- add this
        max = cnt[i]; // <-- not cnt.at[i]
        iMaxIdx = i;  // <-- only executed on higher values
    } // <-- add this
}

答案 1 :(得分:0)

您需要int iMaxIdx;以及何时更新max更新iMaxIdx

    for(int i = 1; i<SIZE; i++)
    {
        if(cnt[i] > max){
            max = cnt.at[i];
            iMaxIdx = i;
        }
    }
    // now use iMaxIdx as it contains the index

答案 2 :(得分:0)

当您找到所需的元素时,使用for循环访问数组的每个元素。 For iterator值将是位置

答案 3 :(得分:0)

int maxid=0;
for(int i = 0; i<SIZE; i++)
{
    if(cnt[i] > max)
        {
            max = cnt[i];
            maxid=i;
        }
}

cout <<"The highest selling flavor was "<< flav[maxid]<<endl;

编辑了最后一节。这是你想要的我相信吗?