写一个算法实现统计在输入字符串中各个不同字符出现的频度。(字符串中的合法字符A~Z这26个字母和0~9这10个数字)。
时间: 2024-05-01 07:23:41 浏览: 68
可以使用一个长度为36的数组来记录每个字符出现的频率,数组下标0~25分别对应A~Z这26个字母,下标26~35分别对应0~9这10个数字。具体实现如下:
```python
def count_chars(s):
freq = [0] * 36 # 初始化频率数组
for c in s:
if c.isalpha(): # 如果是字母
freq[ord(c.upper()) - ord('A')] += 1 # 将字母转换为大写后减去A的ASCII码,作为下标
elif c.isdigit(): # 如果是数字
freq[ord(c) - ord('0') + 26] += 1 # 将数字减去0的ASCII码,作为下标
return freq
```
这个算法的时间复杂度为$O(n)$,其中$n$是输入字符串的长度。
相关问题
用C语言写一个算法实现统计在输入字符串中各个不同字符出现的频度。(字符串中的合法字符A~Z这26个字母和0~9这10个数字)
在C语言中,你可以使用哈希表(如数组或者结构体)来统计输入字符串中每个字符的出现次数。这里是一个简单的示例,它使用数组`freq`存储字符及其频率:
```c
#include <stdio.h>
#include <string.h>
#define MAX_CHAR 62 // 总共考虑26个大小写字母和0-9的数字
// 结构体表示字符及其出现次数
typedef struct {
char ch;
int count;
} CharFreq;
// 初始化字符频率数组为0
void init_freq(CharFreq freq[]) {
for (int i = 0; i < MAX_CHAR; ++i) {
freq[i].count = 0;
}
}
// 更新字符计数
void update_char(CharFreq freq[], char ch) {
freq[ch - 'A' || ch - 'a' || ch - '0']++; // 根据ASCII值计算索引位置
}
// 统计并打印字符频率
void print_freq(CharFreq freq[]) {
for (int i = 0; i < MAX_CHAR; ++i) {
if (freq[i].ch != '\0') { // 非空字符
printf("Character '%c' appears %d times.\n", freq[i].ch, freq[i].count);
}
}
}
int main() {
CharFreq freq[MAX_CHAR];
char str[100];
// 输入字符串
printf("Enter a string (A-Z, a-z, and 0-9): ");
fgets(str, sizeof(str), stdin); // 注意处理换行符
str[strlen(str)-1] = '\0'; // 去掉末尾的换行符
// 初始化和更新频率
init_freq(freq);
for (char c : str) {
if ('A' <= c && c <= 'Z' || 'a' <= c && c <= 'z' || '0' <= c && c <= '9') {
update_char(freq, c);
}
}
// 打印结果
print_freq(freq);
return 0;
}
```
用Cpp语言写一个算法实现统计在输入字符串中各个不同字符出现的频度。(字符串中的合法字符A~Z这26个字母和0~9这10个数字)
在C++中,我们可以使用`std::map`来实现这个功能,因为它能自动将键映射到值,并提供O(1)的时间复杂度来进行查找和插入操作。这里是一个简单的算法:
```cpp
#include <iostream>
#include <string>
#include <map>
std::map<char, int> countCharacters(const std::string& input) {
std::map<char, int> charCount;
for (char c : input) {
// 确保字符在合法范围内
if ('A' <= c && c <= 'Z' || 'a' <= c && c <= 'z' || '0' <= c && c <= '9') {
charCount[c]++;
}
}
return charCount;
}
int main() {
std::string str = "Hello World! 12345";
std::map<char, int> freq = countCharacters(str);
// 输出每个字符及其频率
for (const auto& pair : freq) {
std::cout << "Character: " << pair.first << ", Frequency: " << pair.second << '\n';
}
return 0;
}
```
在这个程序中,我们首先创建了一个空的`std::map`,然后遍历输入字符串中的每一个字符。如果字符是字母或数字,我们就将其添加到映射中并增加计数。最后,我们在主函数中打印出每个字符及其出现的次数。
阅读全文