问答题 如何找出一个字符串中第一个只出现一次的字符
【正确答案】
【答案解析】如何找出一个字符串中第一个只出现一次的字符?例如,输入abac,则输出b。本题可以采用hash法来实现。首先申请一个长度为256的表,对每个字符hash计数即可。因为C/C++中的char有3种类型:char、signed char和unsigned char。char类型的符号是由编译器指定的,一般是有符号的,在对字符进行hash时,应该先将字符转为无符号类型;否则当下标为负值时,就会出现越界访问。
另外,可以用一个buffer数组记录当前找到的只出现一次的字符,避免对原字符串进行第二次遍历。
程序示例如下:
#include<stdio.h>
char GetChar(char str[])
{
if(str==NULL)
retum 0;
const int size=256;
unsigned count[size]={0};
char buffer[size];
char *q=buffer;
for(const char* p=str;*p!=0;++p)
if(++count[(unsigned char)*p]==1)
*q++=*p;
for(p=buffer;p<q;++p)
if(count[(unsigned char)*p]==1)
return *p;
return 0;
}
int main()
{
printf("%c/n",GetChar("abac"));
return 0;
}
程序输出结果:
b