我无法解释本练习的逻辑......
演习要求我注册5"品牌"在一个结构中 并且输出必须显示每个品牌重复多少次,如果它已经注册了不止一次。
#include <stdio.h>
#include <stdlib.h>
#define C 5
typedef struct
{
int id;
char brands[30];
} Something;
Something a[C];
int main()
{
int i=0, j=0;
//input
for(i=0;i<C;i++)
{
a[i].id = i;
printf("BRAND: ");
fflush(stdin);
gets(a[i].brands);
}
for(i=0;i<C;i++)
{
for(j=0;j<C;j++)
{
if (strcmp(a[i].brands, a[j].brands)==0)
//
}
}
return 0;
}
品牌输入值不是恒定的,它可以是任何东西。
因此,我正在考虑通过搜索,比较是否有相同的品牌和增加每个的计数器。 (这个计数器是我卡住的地方,因为我不知道注册表中会有多少个不同的品牌)...
E.g。 1
输入
Ford
Ferrari
Ford
Nissan
Nissan
输出应该是这样的:
Ford 2x
Ferrari 1x
Nissan 2x
E.g。 2
输入
Ford
Ford
Ford
Ford
Nissan
输出:
Ford 4x
Nissan 1x
答案 0 :(得分:1)
有很多方法可以达到你想要的效果。以下是一些有助于您找到解决方案的指示。
第一步是在你的结构中包含一个计数器。
typedef struct
{
int id;
char brands[30];
unsigned int count;
} Something;
将所有count
字段初始化为0.如果brands
大于0,则count
字段仅包含有效字符串。由于a
是全局变量,所有字段都自动初始化为0,因此不需要额外的代码。
然后,每次阅读输入时,代码都会从头开始搜索a
。搜索逻辑将是
for each 'a' entry
if (count field > 0)
if (brand field is same as input)
// Found a match
increment count field
break out of loop
// else will check next entry by continuing the loop
else
// Reached end of valid entries. Hence no match.
Create a new entry. Copy input into the brand field.
Set count field to 1.
break out of loop
我故意显示伪代码,将C代码留作练习。但基本上这个想法是(如我之前的评论中所述)在读取每个输入后搜索现有的有效条目(你不需要两个单独的数组)。