设计一个算法统计输入字符串中各个不同字符出现的频率并且将结果存入文件(字符串中的合法字符为A~Z这26个字母和0~9这10个数字)用c++语言来实现完整程序
时间: 2024-05-11 16:17:11 浏览: 17
好的,我可以为您提供一个基本的算法和代码实现,下面是完整程序:
```c
#include <stdio.h>
#include <ctype.h> // 包含 isalnum() 函数
#define MAX_SIZE 36 // 字母和数字的总数
int main() {
char str[1000];
int freq[MAX_SIZE] = {0}; // 存储字符频率的数组
FILE *fp;
int i;
printf("请输入字符串:");
fgets(str, 1000, stdin);
// 统计字符频率
for (i = 0; str[i] != '\0'; i++) {
if (isalnum(str[i])) { // 判断字符是否合法
if (isdigit(str[i])) { // 如果是数字
freq[str[i] - '0' + 26]++;
} else { // 如果是字母
freq[toupper(str[i]) - 'A']++;
}
}
}
// 将结果存入文件
fp = fopen("result.txt", "w");
fprintf(fp, "字符 频率\n");
for (i = 0; i < MAX_SIZE; i++) {
if (i < 26) {
fprintf(fp, "%c %d\n", i + 'A', freq[i]);
} else {
fprintf(fp, "%c %d\n", i - 26 + '0', freq[i]);
}
}
fclose(fp);
printf("结果已存入文件 result.txt 中\n");
return 0;
}
```
程序运行时,会提示用户输入字符串,然后使用 `fgets()` 函数读入字符串,再通过循环遍历字符串中的每个字符,判断是否为合法字符(即字母和数字),如果是,则在 `freq` 数组中对应的位置加一。
最后,将统计结果写入文件 `result.txt` 中,格式为 "字符 频率",其中字符包括大写字母 A~Z 和数字 0~9,频率是指该字符在字符串中出现的次数。
注意,为了方便统计,我们将数字放在了字符数组后面,因此在统计时需要将数字的下标加上 26。同时,在输出时,为了让输出的字符对齐,我们在字符和频率之间加了一些空格。