在我的作业中,我必须使用带有某些字段的结构来构建程序。我必须输出一个列表,该列表以升序显示“ 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++;
}
}
}
}
它不起作用-它给了我一些错误。 我该如何运作?
答案 0 :(得分:1)
问题归结于这两行中a
的使用
if (!strcmp(a[j], x[i].societate)) {
strcpy(a[k], x[i].societate);
//...
a
是char[]
,当您执行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;
}
}
}