-2

我要数一数这个小文字“心碎的心碎”每一个字出现的次数。

这段文字的每个单词都是 2darray[100][20]的,其中 100 是 the max_words,20 是 the max_word_length。我有一个指针array[100],其中每个指针都指向这个词。例如,我找不到计算相同单词的聪明方法

a: 2 times
broken: 2 times
heart: 1 time
mind: 1 time
. : 1 time

这些将是指针和单词数组:

POINTERS ARRAY                      WORDS ARRAY
point0(points "a")                  a
point1(points "broken")             broken
point2(points "heart")              heart
point3(points "of")                 of
point4 (points "a")                 mind
point5(points "broken")             .
point6(points "mind")               \0\0\0\0\0
point7(points ".")                  \0\0\0\0\0
NULL                                ..
NULL
..
NULL                                \0\0\0\0\0

旁注:每个单词都是小写的。

void frequence_word(char *pointers[], int frequence_array[]) {
  int word = 0;
  int i;
  int count = 1;
  int check[MAX_WORDS];

  for (word = 0; word < MAX_WORDS; word++) {
    check[word] = -1;
  }

  for (word = 0; word < MAX_WORDS; word++) {
    count = 1;

    for (i = word + 1; i < MAX_WORDS; i++) {

      if (pointers[word + 1] != NULL
          && strcmp(pointers[word], pointers[i]) == 0) {
        count++;
        check[i] = 0;
      }

    }
    if (check[word] != 0) {
      check[word] = count;
    }

  }
}

请问有什么想法吗?

4

1 回答 1

0

这似乎是strstr. 您可以调用strstr,然后迭代地重新分配给原始字符串,直到达到 NULL。

const char substring[] = "A broken heart of a broken mind";
const char* total = ...;

const char* result;
long count = 0;
while (result = strstr(total, substring)) {
    count++;
    total += (sizeof(substring) - 1);
}

我认为这主要是不言自明的,但我将解释这一行:

total += (sizeof(substring) - 1);

它利用了sizeofon arrays 返回数组长度的事实。因此,字符数组上的 sizeof 返回其中的字符数。我们减一以忽略空终止符。

于 2021-01-15T15:23:29.953 回答