题目:
在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。
分析:
这道题是2006年google的一道笔试题。
ASCII码共有128个,所以可以建一个包含128个元素的数组,初始化为0。扫描字符串,出现某字符,就自增该字符
对应的ASCII值为下标的元素值!
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int count[128]; //count数组存储每个字符出现的次数
void CountTimes(char *str); //计算str数组中每个字符出现的次数
int main()
{
char str[100]; //存储字符串
while (printf("Please input a string : "),fgets(str,sizeof(str),stdin)!=NULL)
{
CountTimes(str);
}
return 0;
}
void CountTimes(char *str)
{
int len,i;
len=strlen(str)-1; //fgets读入的字符串末尾会多一个换行符,ASCII值为10,故减一
memset(count,0,sizeof(count));
for (i=0;i<len;i++)
{
count[str[i]]++;
}
//下面做法是错误的,感谢tongjianfeng
//for (i=0;i<128&&count[i]!=1;i++);//寻找第一个出现一次元素的下标
//printf("The character which appears only once is : %c\n\n",i);
//修改如下:
for (i=0;i<len;i++)
{
if (count[str[i]]==1)
{
printf("The character which appears only once is : %c\n\n",str[i]);
return ;
}
}
}