统计给定字符串中各单词出现的次数,具体要求如下: 接收给定的一行字符串(如:hello hi ask hi); 切割字符串,统计字符串中各单词出现的次数,并输出结果。 注意:字符串中各单词之间间隔一个空格。用C语言
时间: 2024-09-19 07:04:33 浏览: 20
在C语言中,你可以使用标准库函数`strtok()`来进行字符串分割,并结合`hash_map`(类似于C++中的`std::map`)数据结构来统计单词出现的次数。以下是一个简单的示例:
```c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct {
char* word;
int count;
} WordCount;
// 自定义哈希表,用于存储单词及其计数
typedef struct {
WordCount* table[256]; // 使用ASCII字符作为键,这里假设最多只有一个字母长度的单词
} WordBucket;
// 计算并更新单词计数
void increment_count(WordBucket* bucket, char* word) {
for (int i = 0; word[i] != '\0'; ++i) {
if (!bucket[word[i]]) {
bucket[word[i]] = (WordCount*)malloc(sizeof(WordCount));
bucket[word[i]]->word = word;
bucket[word[i]]->count = 1;
} else {
bucket[word[i]]->count++;
}
}
}
// 分割字符串并统计单词
void count_words(char* str, WordBucket* bucket) {
char* token = strtok(str, " ");
while (token != NULL) {
increment_count(bucket, token);
token = strtok(NULL, " ");
}
}
// 输出结果
void print_word_counts(WordBucket* bucket) {
for (char* key = "abcdefghijklmnopqrstuvwxyz"; key[0] <= 'z'; ++key) {
if (bucket[key]) {
printf("%s: %d\n", key, bucket[key]->count);
}
}
}
int main() {
char str[] = "hello hi ask hi";
WordBucket bucket;
memset(bucket.table, 0, sizeof(bucket.table));
count_words(str, &bucket);
print_word_counts(&bucket);
return 0;
}
```
这个程序首先初始化一个`WordBucket`结构,然后遍历输入字符串,将每个单词添加到哈希表中并计算其计数。最后,它会打印出所有统计过的单词及其出现次数。