如何将字段从结构添加到数组?

时间:2018-10-25 18:23:08

标签: c++

在我的作业中,我必须使用带有某些字段的结构来构建程序。我必须输出一个列表,该列表以升序显示“ societate”字段的名称以及这些字段的数量。

所以我尝试将所有这些字段添加到新数组中,同时检查该字段是否还不在该数组中。

这是我尝试执行的操作:

#include "stdafx.h"
#include <iostream>
#include <string.h>

using namespace std;

struct sponsorizari {
    char societate[30], localitate[30];
    int cod_sponsorizare, data, valoare;
};

int main()
{
    int n, k = 0;
    char a[100];
    sponsorizari x[100];
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        cin.get();
        cin.get(x[i].societate, 30);
        cin.get();
        cin.get(x[i].localitate, 30);
        cin.get();
        cin >> x[i].cod_sponsorizare >> x[i].data >> x[i].valoare;
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < k; j++)
        {
            if (!strcmp(a[j], x[i].societate))
            {
                strcpy(a[k], x[i].societate);
                k++;
            }
        }
    }
}

它不起作用-它给了我一些错误。 我该如何运作?

Edit: compiler errors

2 个答案:

答案 0 :(得分:1)

wandbox link for the curious

问题归结于这两行中a的使用

if (!strcmp(a[j], x[i].societate)) {
    strcpy(a[k], x[i].societate);
    //...

achar[],当您执行a[j]时会给您单独的char。您无法将char*(字符串)复制到char。我怀疑您要在这里使用a

if (!strcmp(a, x[i].societate)) {
    strcpy(a, x[i].societate);
    //...

尽管我迷失了大部分代码。您正在检查它们是否相同,然后从一个复制到另一个是否相同?

您一开始都不会在a中放入任何内容。

您可以在开始内部循环k之前将0初始化为for (int j = 0; j < k; j++)-由于k*,因此此操作永远不会运行。我无法说出内部循环的目的是什么,但看起来它不属于

int count = 0;
for (int i = 0; i < n; i++) {
    if (!strcmp(a, x[i].societate)) {
        ++count;
    }
}

为回应您的问题陈述,以下是您应该采取的方法的概述

unique_strings = []  // initially empty

for (each sponsorizari sp in x) {
    unique = true; // assume s it's unique
    for (each str in unique_strings) {
        if (sp.societate == str)
            unique = false; // found a match, not unique
            break;
        }
    }
    if (unique) { // we got through all unique_strings without a match
       add sp.societate to unique_strings
    }
}

如果这是上课,我强烈建议您去上班时间,因为您显然迷路了。

答案 1 :(得分:0)

您遇到的问题的有效解决方案:

#include <iostream>
#include <string.h>
#include <unordered_map>

using namespace std;

struct sponsorizari {
    string societate, localitate;
    int cod_sponsorizare, data, valoare;
};

int main()
{
    int n, count = 0;
    unordered_map<string,int> stringMap;
    cout<<"Enter Value of n"<<endl;
    cin >> n;
    sponsorizari x[n];
    for (int i = 0; i < n; i++)
    {
        cout<<"Enter societate "<<i<<endl;
        cin>>x[i].societate;
        cout<<"Enter localitate "<<i<<endl;
        cin>>x[i].localitate;
        cout<<"Enter cod_sponsorizare "<<i<<endl;
        cin>>x[i].cod_sponsorizare;
        cout<<"Enter data "<<i<<endl;
        cin>>x[i].data;
        cout<<"Enter valoare "<<i<<endl;
        cin>>x[i].valoare;
        stringMap[(x[i].societate)]++;
    }
    cout<<"Among the n input societate's, the unique societate's are"<<endl;
    for (auto x : stringMap) 
    {
        if(x.second==1)
        {
            cout<<x.first<<endl;
        }
    }
}