【答案解析】:
这道题思路比较简单,因为题目圈定出现的字符都是
ascii
值小于
127
的字符,因此只需要定义一个标记数组大小为
127
,然后将字符作为数组下标在数组中进行标记,若数组中没有标记过表示第一次出现,进行计数,否则表示重
复字符。
示例:查表法,
"aca"
,首先把
a
字符
(
ascii
值为
97
)
作为下标,将标记数组的第
97
位置
1
,下次如果还有
a
字符出
现,到下标
'a'
或者
97
的位置一看是
1
就表示
a
已经统计过了。
本人代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int main()
{
char arr[501] = { 0 };
int arrn[128] = { 0 }; //为128个字符开辟空间
int len = 0;
int count = 0;
scanf("%s", arr);
len = strlen(arr);
for (int i = 0; i < len; i++)
{
if (arrn[arr[i]] == 0) //判断是否标记
{
arrn[arr[i]]++; //标记
count++; //统计
}
}
printf("%d", count);
system("pause");
return 0;
}
答案代码:
#include <stdio.h>
int main()
{
char tmp[501] = {0};
while(~scanf("%s", tmp)) {
char table[128] = {0}, *ptr = tmp;
int count = 0;
while(*ptr != '\0') {
if (table[*ptr] != 1) {//判断字符ascii值作为下标的位置是否被标记过,是否是重复字符
count++; //当前字符的位置没有被标记过表示没有出现过,则计数+1
}
table[*ptr++] = 1;//将字符ascii值作为下标的位置进行标记置1
}
printf("%d\n", count);
}
return 0;
}