如何解决计算C中每个单词的出现次数
此文本的每个单词都在 2d array[100][20]
中,其中 100 是 max_words
,20 是 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;
}
}
}
有什么想法吗?
解决方法
这似乎是 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);
它利用了数组上的 sizeof
返回数组长度的事实。因此,字符数组上的 sizeof 返回其中的字符数。我们减一以忽略空终止符。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。