写一个算法统计在输入字符串中各个不同字符出现的频度并将结果存入文件(字符串中的合法字符为a-z这26个字母和0-9这10个数字)。
时间: 2023-05-31 14:20:09 浏览: 357
### 回答1:
以下是一种 Python 实现该算法的方法:
1. 定义一个长度为36的列表,用来记录各个字符的频度。
2. 遍历输入字符串中的每一个字符:
a. 如果该字符是合法的字符,则将该字符的频度加 1。
b. 否则,忽略该字符。
3. 将统计结果写入文件,每行一个字符和它的频度。
以下是该算法的代码实现:
```
def count_frequency(input_string):
frequency = [0] * 36
for char in input_string:
if char.isdigit():
frequency[int(char)] += 1
elif char.isalpha():
frequency[ord(char) - ord('a') + 10] += 1
return frequency
def save_to_file(frequency, file_path):
with open(file_path, 'w') as f:
for i in range(36):
if i < 10:
char = str(i)
else:
char = chr(ord('a') + i - 10)
f.write('{}: {}\n'.format(char, frequency[i]))
input_string = 'abcdefghijklmnopqrstuvwxyz0123456789'
frequency = count_frequency(input_string)
save_to_file(frequency, 'frequency.txt')
```
### 回答2:
要实现这个算法,我们可以按以下步骤进行:
1. 根据题目要求,定义一个长度为36的整型数组,用于统计a-z这26个字母和0-9这10个数字各自出现的次数,同时定义一个字符串变量用来存储输入的字符串。
2. 在读入字符串时,我们需要遍历输入的每一个字符,判断该字符是否为合法字符(即是否为a-z这26个字母和0-9这10个数字中的一个),如果是,则将该字符的计数器+1;如果不是,则跳过该字符。
3. 最后,将各个字符出现的频度存入一个文件中。为方便查看,可以按频度从高到低将字符和其出现次数依次输出到文件中。
下面是C++的伪代码描述:
```
int count[36] = {0}; // 用来存储字符出现频度的数组,共36个元素
string str; // 存储输入的字符串
// 读入字符串
cin >> str;
// 遍历字符串中的所有字符
for(int i = 0; i < str.length(); i++){
char ch = str[i];
// 判断该字符是否为合法字符
if((ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9')){
if(ch >= 'a' && ch <= 'z'){ // 对于a-z这26个字母
count[ch - 'a']++;
}
else{ // 对于0-9这10个数字
count[ch - '0' + 26]++;
}
}
}
// 将统计结果写入文件
ofstream out("result.txt"); // 打开输出文件
if(out.is_open()){ // 判断是否成功打开文件
for(int i = 0; i < 26; i++){ // 输出a-z这26个字母的结果
char ch = i + 'a';
out << ch << ":" << count[i] << endl;
}
for(int i = 26; i < 36; i++){ // 输出0-9这10个数字的结果
char ch = i + '0' - 26;
out << ch << ":" << count[i] << endl;
}
out.close(); // 关闭输出文件
}
else{
cout << "Failed to open the output file!" << endl;
}
```
以上便是统计输入字符串中各个不同字符出现频度并将结果存入文件的算法实现方法。
### 回答3:
算法思路:
该算法将输入字符串中26个字母和10个数字的出现频率统计到一个大小为36的数组freq中,数组下标表示字符的ascii码。
1. 首先,初始化freq数组,所有元素赋值为0。
2. 然后,遍历输入字符串,当遍历到一个字符时,将其ascii码存放在tem变量中,判断该字符是否符合合法字符的要求。
3. 当该字符符合要求时,将数组freq中的对应元素的值增加1。
4. 最后,将freq数组中的结果写入文件。
算法代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 1000
int freq[36];//用于统计字符频率的数组
void Init()
{
memset(freq, 0, sizeof(freq));//将数组初始化为0
}
void Count(char * str)
{
int tem;
while (*str) {
tem = (int)(*str);//将字符转换为ascii码
if (tem >= 48 && tem <= 57)//当字符为数字时,统计数字的频率
freq[tem - 48]++;
else if (tem >= 97 && tem <= 122)//当字符为小写字母时,统计字母的频率
freq[tem - 87]++;
str++;
}
}
int WriteToFile(char * file)
{
FILE *fp;
int i;
if ((fp = fopen(file, "w+")) == NULL) {
printf("can not open file %s\n", file);
return -1;
}
for (i = 0; i < 36; i++) {
if (i < 26)
fprintf(fp, "%c: %d\n", (char)(i + 97), freq[i]);
else
fprintf(fp, "%c: %d\n", (char)(i + 22), freq[i]);
}
fclose(fp);
return 1;
}
int main()
{
char str[MAX] = "hello123world123";
char file[] = "result.txt";
Init();
Count(str);
WriteToFile(file);
return 0;
}
```
注:该代码使用的是C语言,实现了在输入字符串中各个不同字符出现的频度统计和将结果存入文件的功能。