题目描述
编写一个函数,计算字符串中含有的不同字符的个数。字符在 ASCII 码范围内( 0~127 ,包括 0 和 127 ),换行表示结束符,不算在字符里。不在范围内的不作统计。多个相同的字符只计算一次
例如,对于字符串 abaca 而言,有 a、b、c 三种不同的字符,因此输出 3 。
数据范围: 1 <= n<=500
具体实现:
#include <stdio.h>
int main() {
char *str=(char*)malloc(sizeof(char)*500);
int* hash=(int*)calloc(500,sizeof(int));
gets(str);
int num=0;
while (str[num]) {
num+=1;
}//获取str的长度
for (int i=0; i<num; i++) {
hash[str[i]]=1;
}
int sum=0;
for (int i=0; i<128;i++) {
if (hash[i]!=0) {
sum+=1;
}
}
printf("%d",sum);
}
思路:使用hash表,只要str中有不同的字符出现,就设置对应的hash表中对应的位置为1,最后只需要统计hash表中有多少个1。
附:
hash的使用
int* hash = (int*)calloc(MAX_SIZE, sizeof(int));
gets()函数:从输入缓冲区中读取一个字符串存储到字符指针变量 str 所指向的内存空间。
char *gets(char *str);
char str[100] = "\0";
printf("输入字符串:");
gets(str);
printf("%s\n", str);