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

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

示例1
输入
abc
输出
3

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

#include
#include
 
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
#include

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;
}

你可能感兴趣的:(牛客网刷题)