牛客网刷题--字符个数统计

计算字符串中不同字符数
本文介绍两种计算字符串中不同ASCII字符数量的方法。第一种,通过逐个字符比对并存储,最后计算存储数组的长度;第二种,使用一个128元素的数组,通过ASCII值映射并累加计数,更高效简洁。

题目描述
编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127),换行表示结束符,不算在字符里。不在范围内的不作统计。注意是不同的字符
输入描述:
输入N个字符,字符在ACSII码范围内。
输出描述:
输出范围在(0~127)字符的个数。

示例1
输入
abc
输出
3

解题思路:
第一种,将每个不重复的字符单独拿出来放进数组,最后进行该数组的大小计算,注意在将字符靠背巾数组时要使用strncat,不能使用strcat。strcat会将该地址下之后的所有字符都拷贝进去而不是一个字符。
第二种,更加简单,定义一个128元素的数组,将输入的数组每个字符所对应的ASCII值对应到该数组的元素下标进行赋值为1,最后计算该数组所有元素之和即可。

#include<stdio.h>
#include<string.h>
 
int Choose(char *A, char a)
{
    int len = strlen(A);
    int i;
    for(i = 0; i < len; i++)
    {
        if(A[i] == a)
        {
            return 0;
        }
    }
    return 1;
}
int main()
{
    char Arr[1024] = {0};
    char Judge[1024] = {0};
    gets(Arr);
    int len = strlen(Arr);
    int i;
    for(i = 0; i < len; i++)
    {
        if(Choose(Judge, Arr[i]) == 1 && 0 <= Arr[i] <= 127)
        {
            strncat(Judge, &Arr[i], 1);
        }
    }
    int LEN = strlen(Judge);
    printf("%d\n", LEN);
    return 0;
}

第二种

#include<stdio.h>
#include<string.h>

int main()
{
    char Arr[1024] = {0};
    char Alice[128] = {0};
    gets(Arr);
    int len = strlen(Arr);
    int i;
    for(i = 0; i < len; i++)
    {
        if(0 <= Arr[i] <= 127)
        {
            Alice[Arr[i]] = 1;
        }
    }
    int count = 0;
    for(i = 0; i < 128; i++)
    {
        count = count + Alice[i];
    }
    printf("%d\n", count);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值