C语言编程实现输入一串英文,统计其中各单词出现的个数不区分大小写,以000作为字符串输入结束标志
时间: 2024-12-23 20:27:43 浏览: 17
在C语言中,你可以通过以下几个步骤实现这个功能:
1. 定义一个全局数组或者哈希表(如`struct WordCount`结构体),用于存储每个单词及其出现次数。
2. 创建一个主循环,从用户那里接收输入字符,直到遇到"000"停止输入。
3. 使用`strtok()`函数分割单词,忽略大小写。这里可以先将所有字母转换为小写再处理。
4. 对于每个单词,检查是否已经在数组中,如果存在,则增加计数;如果不存在,则初始化一个新的条目。
5. 每次读取一个单词后,都要更新全局数组。
6. 循环结束后,遍历并打印出结果。
以下是一个简化的伪代码示例:
```c
#include <stdio.h>
#include <ctype.h>
#include <string.h>
typedef struct {
char word[100];
int count;
} WordCount;
WordCount *word_counts = NULL; // 初始化全局数组
int num_words = 0;
void update_word_count(char *input) {
char *token = strtok(input, " ");
while (token != NULL) {
char lower_case_word[strlen(token) + 1];
memset(lower_case_word, 0, sizeof(lower_case_word));
for (int i = 0; token[i]; i++) {
lower_case_word[i] = tolower(token[i]);
}
lower_case_word[strlen(token)] = '\0';
// 查找单词并更新计数
for (int j = 0; j < num_words; j++) {
if (!strcmp(word_counts[j].word, lower_case_word)) {
word_counts[j].count++;
break;
}
}
// 如果没有找到,添加新条目
if (j == num_words) {
strcpy(word_counts[num_words].word, lower_case_word);
word_counts[num_words++].count = 1;
}
token = strtok(NULL, " ");
}
}
int main() {
char input[1000];
while (scanf("%s", input), strcmp(input, "000")) {
input[strcspn(input, "\n")] = '\0'; // 去除换行符
update_word_count(input);
}
printf("Words and their counts:\n");
for (int i = 0; i < num_words; i++) {
printf("%s: %d\n", word_counts[i].word, word_counts[i].count);
}
return 0;
}
```
阅读全文