C++ 在C+中计算数组中不相等的字符串+;

C++ 在C+中计算数组中不相等的字符串+;,c++,arrays,string,count,C++,Arrays,String,Count,我想计算数组中所有不同的字符串元素。 因此,我的意见是: 5 Lemon Orange Lemon Mango Lemon 输出应该是这样的: 3 我的代码的问题是,我的代码计算所有元素,而不仅仅是不同的元素,我不知道为什么 这是我的密码: #include <iostream> using namespace std; int main() { int N; cin >> N; string Tname; string da

我想计算数组中所有不同的字符串元素。 因此,我的意见是:

5 Lemon Orange Lemon Mango Lemon
输出应该是这样的:

3
我的代码的问题是,我的代码计算所有元素,而不仅仅是不同的元素,我不知道为什么

这是我的密码:

#include <iostream>

using namespace std;

int main()
{
    int N;   
    cin >> N;
    string Tname;
    string data[N];
    int counter = 0;

    for(int i = 0; i<N; i++)
    {
        cin >> Tname;
        data[i] = Tname;
    }

    for(int l = 0; l<N; l++)
    {
        int k = 0;
        while(k<N && (data[l] != data[k]))
        {
            k++;
        }
        if(k<N)
        {
            counter += 1;
        }

    }
    cout << counter << endl;
    return 0;
}
#包括
使用名称空间std;
int main()
{
int N;
cin>>N;
字符串名称;
字符串数据[N];
int计数器=0;
对于(int i=0;i>t名称;
数据[i]=Tname;
}

对于(int l=0;l而言,问题在于算法:每个项都等于自身,这将过早地结束k循环。此外,仅当重复该项时才递增

我建议您更改循环,以便不将每个项目与每个其他项目进行比较,而仅将项目与以前处理的项目进行比较:

for(int l = 0; l<N; l++)
{
    int k = 0;
    while(k<l &&  data[l] != data[k])  // only previous items
    {
        k++;
    }
    if(k==l)   // if no identical, we can add this one
    {
        cout<<l<<" "<<data[l]<<endl;
        counter += 1;
    }
}

for(int l=0;l如果我很了解您的问题,您需要在数组中具有最大外观的值,则需要进行一些修改以实现此目的:

#include <iostream>

using namespace std;

int main()
{
    int N;   
    cin >> N;
    string Tname;
    string data[N];
    int counter = 0;

    for(int i = 0; i<N; i++)
    {
        cin >> Tname;
        data[i] = Tname;
    }

    int tempCounter; // a temporary counter for each item of the array .
    for(int l = 0; l < N; l++)
    {
        tempCounter = 0;
        int k = 0;
        while(k<N)
        {
            if(data[l] == data[k])
                tempCounter++;
            k++;
        }
        if(tempCounter > counter) // if the new counter is higher than the counter 
            counter = tempCounter;
    }
    cout << counter << endl;
    return 0;
}
#包括
使用名称空间std;
int main()
{
int N;
cin>>N;
字符串名称;
字符串数据[N];
int计数器=0;
对于(int i=0;i>t名称;
数据[i]=Tname;
}
int tempCounter;//数组中每个项的临时计数器。
对于(int l=0;l
因为你总是在k到达N之前停下

k必须从l开始

您的逻辑是,如果计数器不在列表的剩余部分,则向计数器添加1
但是代码检查整个列表,所以你从不把WHW WHECH列入列表两次。

这个代码>字符串数据[n];< /C> >是无效的C++。我假设只加载<代码> STD::unOrdEdEdTys<代码>,并报告<代码> siz()
循环完成是不可能的。这并不能解决逻辑问题。这是3个柠檬的计数,恰好与答案相同。@super-oops,的确如此。我编辑了,保留了循环结构,但只查看了以前的项目。是啊,谢谢,这解决了我的代码,现在我明白了我的逻辑中的问题。谢谢太多了。@Benedek很高兴知道这有帮助:-)谢谢你的反馈,而不是最大的外观。我想计算数组中的所有不同元素。如果我的解释不准确,很抱歉。但是谢谢你的帮助,我想我也从中吸取了教训。