描述:
编写一个函数,计算字符串中含有的不同字符的个数。字符在 ASCII 码范围内( 0~127 ,包括 0 和 127 ),换行表示结束符,不算在字符里。不在范围内的不作统计。多个相同的字符只计算一次 例如,对于字符串 abaca 而言,有 a、b、c 三种不同的字符,因此输出 3 。 数据范围: 1≤n≤500
输入描述:
输入一行没有空格的字符串。
输出描述:
输出 输入字符串 中范围在(0~127,包括0和127)字符的种数。
示例1:
输入:abc
输出:3
示例2:
输入:aaa
输出:1
解题思路: 1、限制了输入长度1-500,可以设置一个宏定义常量; 2、输入的字符也有限定范围,ASCII值在0-127,这样就能想到用一个定长的数组来存储每一种字符; 3、我们知道ASCII表示的字符本质上存储的是一个int型的整数,所以可以根据这个字符的ASCII整数值作为在数组中的索引,这样就可以不用比较,因为相同的字符是存储在索引相同的数组位置中的,所以最后只需要再对这个定长数组遍历一遍,计算出非空的个数即可。
#include<stdio.h>
#include<string.h>
#define MAX 500
int main(){
int n, count=0;
char str[MAX]={}, str2[127]={};
scanf("%[^\n]\n",str);
for(int i=0;i<strlen(str);i++){
str2[str[i]] = str[i];
}
for(int i=0;i<127;i++){
if(str2[i]!='\0') count++;
}
printf("%d\n",count);
return 0;
}
|