华为机考题:字符个数统计

题目描述

编写一个函数,计算字符串中含有的不同字符 的个数。字符在 ASCII 码范围内(0 ~ 127,包括空格),换行表示结束符,不算入字符。

不在范围内的不作统计。

输入描述

输入一行没有空格的字符串。

输出描述

输出输入字符串中范围 0 ~ 127 内的字符种数。

示例

输入:

text

复制代码
abc

输出:

text

复制代码
3

输入:

text

复制代码
aaa

输出:

text

复制代码
1

C 语言解决方案

思路

与上一题类似的"哈希去重"思想,但这里是统计字符种数:

  1. 开辟大小为 128 的数组 seen[128],初始化为 0。

  2. 遍历字符串每个字符 c,若 c 在 0 ~ 127 范围内且 seen[c] == 0,则计数加一并标记。

  3. 最后输出计数。

关键点: 字符本质上是整数(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;
}
相关推荐
人工智能培训6 小时前
边缘AI与大模型轻量化:让智能跑进每一个终端
大数据·人工智能·算法·重构·生活
lengxuenong7 小时前
树状数组 · 信息学学习手册3-优化LIS
c++·学习·算法
动词ing7 小时前
【题目练习】外观数列
算法
余额瞒着我当琳7 小时前
C++11,发展历史浅谈,初始化列表和对象初始化,右值引用和移动语义
java·开发语言·c++·算法
suhan7 小时前
【数据结构】六、图:4.图的遍历(深度优先算法DFS、广度优先算法BFS)
数据结构·算法·排序算法
suhan7 小时前
【数据结构】六、图:3.十字链表、邻接多重表、边集数组
数据结构·算法·排序算法
Dola_Zou7 小时前
工商业储能系统核心策略
算法·自动化·软件工程
Tsuki_tl7 小时前
【优选算法:双指针】——复写零题解
java·c++·算法·leetcode·数组·双指针·复写零
Rain的Java大神之路7 小时前
面了上百人,我最爱问的LeetCode 1「两数之和」:能背代码的很多,能讲清“先查后存”的没几个
java·后端·算法