题目描述
编写一个函数,计算字符串中含有的不同字符的个数。字符在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;
}
计算字符串中不同字符数
本文介绍两种计算字符串中不同ASCII字符数量的方法。第一种,通过逐个字符比对并存储,最后计算存储数组的长度;第二种,使用一个128元素的数组,通过ASCII值映射并累加计数,更高效简洁。
683

被折叠的 条评论
为什么被折叠?



