C语言实现统计字符串中各字母的个数的算法思想
时间: 2023-08-26 12:04:09 浏览: 99
要统计字符串中各字母的个数,可以使用以下算法思想:
1. 首先,定义一个大小为26的整型数组 `count`,用于记录每个字母的个数。数组的下标表示字母的ASCII码减去字母 'a' 的ASCII码,即 `[0]` 对应字母 'a',`[1]` 对应字母 'b',以此类推。
2. 初始化数组 `count` 中的所有元素为0。
3. 使用循环遍历字符串中的每个字符。
4. 在每次循环中,判断当前字符是否是字母。如果是,则将其转换为小写字母,并计算其在数组 `count` 中的下标。
5. 使用下标访问数组 `count`,并将对应位置的值加1,表示该字母出现的次数加1。
6. 重复步骤3-5,直到处理完整个字符串。
7. 遍历数组 `count`,输出每个字母及其对应的个数。
通过这个算法思想,可以统计字符串中各字母的个数并输出结果。
相关问题
用c语言统计一个字符串 相同字母个数。并描述算法思想
在C语言中,可以使用哈希表(如数组或结构体)来统计一个字符串中每个字符出现的次数,以此来得到相同字母的数量。这是一种基于映射的思想,算法步骤如下:
1. 初始化一个大小足够大的数组,数组的下标代表ASCII码对应的字符,值初始化为0。例如,如果处理小写字母,数组长度可以设为26,因为小写字母有'a'到'z'共26个。
2. 遍历给定的字符串,对于每一个字符:
a. 获取其ASCII码,并转换成数组的索引(比如,'a'对应0,'b'对应1,依此类推)。
b. 检查该位置的数组元素是否已经存在,若存在则加一,表示这个字符出现了多次;若不存在,则将该位置的值设为1。
3. 遍历完成后,数组中每个位置的值就是对应字符出现的次数。最后统计数组中非零元素的数量,即为相同字母的个数。
```c
#include <stdio.h>
#include <string.h>
int countSameChars(char *str) {
int hash[26] = {0}; // 初始化为0的数组,长度取决于字符集
for (int i = 0; str[i]; ++i) {
char ch = tolower(str[i]); // 转换为小写以便统一计数
if (ch >= 'a' && ch <= 'z') {
hash[ch - 'a']++; // 对应ASCII码累加计数
}
}
return count_nonzero(hash); // 返回非零元素个数
}
int count_nonzero(int arr[], int size) {
int count = 0;
for (int i = 0; i < size; i++) {
if (arr[i]) {
count++;
}
}
return count;
}
int main() {
char str[] = "Hello, World!";
int sameCharsCount = countSameChars(str);
printf("相同字母个数: %d\n", sameCharsCount);
return 0;
}
```
阅读全文