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

题目描述

编写一个函数,计算字符串中含有的不同字符 的个数。字符在 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;
}
相关推荐
en.en..1 小时前
Linux 进程退出exit(函数)
java·开发语言·算法
李游Leo1 小时前
HarmonyOS 7 TaskPool + Node-API + zstd:Native 批量压缩任务的主线程隔离、进度回传与资源收口【鸿蒙心迹】
java·华为·harmonyos
All for pursuit.1 小时前
【回溯-2】22.括号生成
数据结构·c++·算法·leetcode
李游Leo1 小时前
HarmonyOS ArkUI Navigation + GridRow:折叠态切换后的双栏路由恢复与返回栈收敛【鸿蒙心迹】
华为·harmonyos
HwJack202 小时前
【共创稿事节】HarmonyOS 7是3DGS 端侧重建:空间建模类应用的设计机会
3d·华为·harmonyos
传奇开心果编程2 小时前
【ArkUI进阶练中学】第5课:编译优化与包体积进
学习·ui·华为·harmonyos
longlongzihan2 小时前
LeetCode 1004.最大连续1的个数III 滑动窗口及动态规划题解
c++·算法·leetcode·dp·滑动窗口
m0_738185822 小时前
Flutter 鸿蒙化实战:flutter_quill 适配 OpenHarmony,富文本编辑器
flutter·华为·harmonyos·鸿蒙
m0_738185822 小时前
Flutter 鸿蒙化实战:flutter_quick_video_encoder 适配 OpenHarmony,逐帧编码视频
flutter·华为·音视频·harmonyos·鸿蒙