题目描述
编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127),换行表示结束符,不算在字符里。不在范围内的不作统计。多个相同的字符只计算一次
例如,对于字符串abaca而言,有a、b、c三种不同的字符,因此输出3。
输入描述:
输入一行没有空格的字符串。

输出描述:
输出范围在(0~127)字符的个数。

示例1
输入
复制
abc
输出
复制
3
第一时间想到了桶排序,所以就用桶排的方法去重去做了,不过用了两次循环有些复杂
#include<stdio.h>
#include<string.h>
#include<math.h>
int a[130];
char str[2000];
int main(){
int max=0;
scanf("%s",str);
for(int i=0;str[i]!=0;i++){
a[str[i]]++;
if(str[i]>max){
max=str[i];
}
}
int sum=0;
for(int i=0;i<=max;i++){
if(a[i]!=0){
sum++;
}
}
printf("%d\n",sum);
}
后面是修改之后的简单程序,其实只需要一层循环就够了。
#include<stdio.h>
#include<string.h>
#include<math.h>
int a[130],sum=0;
char str[2000];
int main(){
scanf("%s",str);
for(int i=0;str[i]!=0;i++){
if(a[str[i]]==0){
sum++;
a[str[i]]++;
}
}
printf("%d\n",sum);
}
明显简答很多变量也比较少。