gpt4 book ai didi

c - 如何计算一个数组中的元素在另一个数组中出现的次数

转载 作者:行者123 更新时间:2023-11-30 16:57:02 24 4
gpt4 key购买 nike

这里是新手。我试图了解如何在两个数组(单词和 uniques)之间循环,以便我可以找出 uniques 数组中的每个元素在单词数组中出现的次数。这是我的非工作代码,请有人帮我看看我在哪里弄乱了循环?

谢谢!

#define MAXWORDS 100
#define ALLWORDS 1000

int main()
{

int c, state, nowords;
state = OUT;

int array[MAXWORDS] = {0};
char words[ALLWORDS] = {'0'};


for (int i = 0; i < MAXWORDS; ++i)
/* printf("%i", array[i]) */;
/* printf("\n"); */

/* Filling an array correctly!!! */
int count;
count = 0;
int countchars;
countchars = 0;
while((c = getchar())!= EOF)
{
words[countchars++] = c;
count++;

switch(c) {
case ' ':
case '\n':
case '\t':
if(state == IN)
{
state = OUT;
++nowords;
}
count = 0;
break;
default:
state = IN;
if(count > 0)
array[nowords] = count;
break;
}
}

words[countchars + 1] = '\0';

printf("number of chars in each word in the sentence: ");
for (int i = 0; array[i] != 0; i++)
printf("%i,", array[i]);
printf("\n");

printf("What was typed and stored into the words array: ");
for(int k = 0; words[k] != '\0'; k++)
printf("%c", words[k]);
printf("\n");

printf("Finding unique chars: ");
int a, b;
char uniques[ALLWORDS] = {'0'};

for(a = 0; a < countchars; a++)
{
for(b = 0; b < a; b++)
{
if(words[a] == words[b])
{
break;
}
}
if(a == b)
{
uniques[a] = words[a];
}
}

uniques[a + 1] = '\0';

for(int d = 0; d != ALLWORDS; d++)
printf("%c", uniques[d]);
printf("\n");

int counting = 0;
for(int j = 0; j < countchars; j++)
{
counting = 0;
for(int h = 0; h < a; h++)
{
if(words[h] == uniques[j])
++counting;
}
printf("\"%c\": %i ", uniques[j], counting);
printf("\n");
}

return 0;
}

我得到这样的输出,这有点奇怪:

 ./homework
a big fat herd of kittens
number of chars in each word in the sentence: 1,3,3,4,2,7,
What was typed and stored into the words array: a big fat herd of kittens

Finding unique chars: a bigftherdokns

"a": 2
" ": 5
"b": 1
"i": 2
"g": 1
"": 0
"f": 2
"": 0
"t": 3
"": 0
"h": 1
"e": 2
"r": 1
"d": 1
"": 0
"o": 1
"": 0
"": 0
"k": 1
"": 0
"": 0
"": 0
"": 0
"n": 1
"s": 1
"
": 1

最佳答案

执行此操作的有效方法如下:使用第三个数组: char counts[5] (必须与您的 uniques 数组具有相同的大小)counts[0] 将保存字母“a”在“words”数组中出现的次数,counts[1] 将保存字母“b”在“words”数组中出现的次数,依此类推...

因此,您只需要一个 for 循环即可执行以下操作:检查words[i]是否在uniques数组中(基本上你检查words[i] <= 'e')。如果words[i]确实<='e'那么你将增加counts[words[i] - 'a']。

现在让我们看看“words[i]-'a'”实际上是如何工作的。如果words[i]是'a'那么你会有words[i] - 'a' = 'a' - 'a' = 0(counts数组中的第一个位置)如果words[i]是'b',那么你将拥有words[i] - 'a' = 'b' - 'a' = 1(计数数组中的第二个位置)。

您使用了 2 个 for 循环的低效方法。

此外,发现错误的一个好方法,特别是在像这样的小代码中,就是实际拿一张纸和一支笔,并尝试遵循如何在小输入上进行编码。另一种(也是更有效的方法)是逐步调试并实际查看每个变量的值。

希望我说得足够清楚。祝你好运:D

关于c - 如何计算一个数组中的元素在另一个数组中出现的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39687499/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com