题目描述
编写一个函数,计算字符串中含有的不同字符 的个数。字符在 ASCII 码范围内(0 ~ 127,包括空格),换行表示结束符,不算入字符。
不在范围内的不作统计。
输入描述
输入一行没有空格的字符串。
输出描述
输出输入字符串中范围 0 ~ 127 内的字符种数。
示例
输入:
text
abc
输出:
text
3
输入:
text
aaa
输出:
text
1
C 语言解决方案
思路
与上一题类似的"哈希去重"思想,但这里是统计字符种数:
-
开辟大小为
128的数组seen[128],初始化为 0。 -
遍历字符串每个字符
c,若c在0 ~ 127范围内且seen[c] == 0,则计数加一并标记。 -
最后输出计数。
关键点: 字符本质上是整数(ASCII 码),可以直接用作数组下标。
代码实现
c
#include <stdio.h>
#include <string.h>
int main(void) {
char s[1005];
scanf("%s", s);
int seen[128];
memset(seen, 0, sizeof(seen));
int count = 0;
int len = strlen(s);
for (int i = 0; i < len; i++) {
unsigned char c = (unsigned char)s[i]; // 转成无符号,避免下标为负
if (c < 128 && !seen[c]) {
seen[c] = 1;
count++;
}
}
printf("%d\n", count);
return 0;
}