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

题目描述

编写一个函数,计算字符串中含有的不同字符 的个数。字符在 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;
}
相关推荐
好悬给我拽开线11 分钟前
ZILOT 论文解析
算法
饮水桶_T1 小时前
JAVA IO流笔记
开发语言·数据结构·算法
星夜离尘562 小时前
MATLAB 离散数据分箱:半开区间、末端点与计数、加权和、平均
算法·matlab
Pniubi2 小时前
力扣76.最小覆盖子串
算法·leetcode·职场和发展
地平线开发者3 小时前
征程6|用 hrt\_model\_exec 看清 YOLOv5x 的输入、原始输出和后处理
人工智能·算法
csdn_aspnet4 小时前
C++ 3个有序点的方向(Orientation of 3 ordered points)
c++·算法
赤生云电竞4 小时前
GPU算力共享平台架构实践:任务分发与资源隔离的关键配置
算法·架构·gpu算力
青少儿编程课堂5 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:折半搜索优化子集枚举(Meet in the Middle)解析
c++·python·算法·bfs·信息学竞赛
wo_jack7 小时前
C++ 入门笔记(十七):list 入门 —— 为什么 list 不能 sort?
数据结构·c++·面试·stl·list
Oneshot7 小时前
DLX(Dancing Links)算法详解:求解数独最快的算法
算法