写一个算法统计在输入字符串中各个不同字符出现的频度并将结果存入文件(字符串中的合法字符为A2这26个字母和0~9这10个数字,大小写忽略不计),用c语言验证
时间: 2024-11-09 08:21:50 浏览: 43
字符串中不同字符出现的频度
5星 · 资源好评率100%
在C语言中,你可以使用哈希表(如`struct`或`map`)来存储字符及其出现的频率。以下是一个简单的示例算法,它将处理输入字符串,忽略大小写,并只考虑A到Z和0到9的字符:
```c
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdbool.h>
#define ALPHABET_SIZE 26
#define DIGITS_SIZE 10
typedef struct {
char ch;
int freq;
} CharCount;
void count_chars(const char *input) {
CharCount counts[ALPHABET_SIZE + DIGITS_SIZE] = {0};
bool in_range = false;
for (char c : input) {
if (isalnum(c)) {
// 转换为小写并校验范围
c = tolower(c);
if ('a' <= c && c <= 'z') {
counts[c - 'a']++;
} else if ('0' <= c && c <= '9') {
counts[ALPHABET_SIZE + c - '0']++;
}
}
}
// 将结果写入文件
FILE* file = fopen("output.txt", "w");
if (file) {
for (int i = 0; i < ALPHABET_SIZE + DIGITS_SIZE; i++) {
if (counts[i] > 0) {
fprintf(file, "%c appears %d times.\n", i == ALPHABET_SIZE ? '0' + i : 'a' + i, counts[i]);
}
}
fclose(file);
printf("Character frequencies have been written to output.txt.\n");
} else {
printf("Failed to open the file for writing.\n");
}
}
int main() {
char input[] = "Test string with numbers 12345 and letters ABCabc";
count_chars(input);
return 0;
}
```
这个程序首先初始化了一个数组来存储字符及其频率,然后遍历输入字符串,更新每个字符的计数。最后,它将结果写入一个名为"output.txt"的文本文件。
注意:这个算法假设输入字符串长度不会过大,如果需要处理非常大的输入,可能需要优化数据结构和内存管理。
阅读全文