写一个算法统计在输入字符串中各个不同字符出现的频度并将结果存入文件(字符串的合法字符为A~Z这26个字母和0~9这10个数字)c语言
时间: 2024-10-25 17:14:38 浏览: 41
在C语言中,你可以使用哈希表(如结构体数组或关联数组)来实现这个任务。这里有一个简单的示例算法:
```c
#include <stdio.h>
#include <string.h>
// 定义一个结构体存储字符及其频率
typedef struct {
char ch;
int freq;
} CharCount;
// 遍历字符串并更新字符计数
void countChars(char *str, CharCount counts[62]) {
for (int i = 0; str[i] != '\0'; i++) {
if ('A' <= str[i] && str[i] <= 'Z') {
counts[str[i] - 'A'].freq++;
} else if ('0' <= str[i] && str[i] <= '9') {
counts[str[i] - '0' + 26].freq++;
}
}
}
// 将字符计数写入文件
void writeToFile(CharCount counts[], FILE *file) {
fprintf(file, "Character\tFrequency\n");
for (int i = 0; i < 62; i++) {
if (counts[i].freq > 0) {
fprintf(file, "%c\t%d\n", i >= 26 ? i - 26 + '0' : 'A' + i, counts[i].freq);
}
}
fclose(file);
}
int main() {
// 输入字符串
char input[100];
printf("Enter a string: ");
fgets(input, sizeof(input), stdin);
// 初始化字符计数数组
CharCount counts[62] = { {'\0', 0}, {0, 0}, ... /* 初始化A-Z和0-9 */ };
// 计算字符频率
countChars(input, counts);
// 打开文件
FILE *file = fopen("char_freq.txt", "w");
if (!file) {
perror("Error opening file");
return 1;
}
// 写入结果
writeToFile(counts, file);
printf("Character frequencies saved in char_freq.txt.\n");
return 0;
}
```
在这个程序中,我们首先定义了一个`CharCount`结构体用于存储字符及其频率。然后在`countChars`函数中遍历输入字符串,更新字符计数。最后在`writeToFile`函数中将结果写入到名为`char_freq.txt`的文件中。
注意,这里的`62`是因为我们需要处理大写字母A-Z、小写字母a-z以及数字0-9,共62种可能的字符。你需要初始化整个`counts`数组,并确保适当关闭文件。
阅读全文