/*
* 找出一个字符串中第一个只出现一次的字符。
思路:
假设字符是ASCII字符,占一个字节,则最多为256个字符,用一个标记数组book[256]来记录每一个字符出现的次数,最后遍历这个标记数组,找到第一个元素值为1的数据的下标值,这个下标就是要找的字符。
*/
#include<stdio.h>
char firstOne(char* p);
int main()
{
/*
int book[256] = {0};//用来标记每一个字符出现的次数,由于一个ASCII字符占一字节
char c = '\0';//用来记录从输入读取的一个字符
while(scanf("%c",&c)==1)//循环读取输入的字符串
{
int i = (int)c;
book[i]++;
}
for(int i = 0;i<256;i++)
{
if(book[i]==1)
{
printf("%c",(char)i);
break;
}
}
*/
char* str = "abaccdeff";
printf("%c",firstOne(str));
return 0;
}
char firstOne(char* str)
{
int book[256] = {0};//用来标记每一个字符出现的次数,由于一个ASCII字符占一字节
while((*str)!='\0')//循环读取输入的字符串
{
int i = (int)(*str);//将字符强转为int下标
book[i]++;//出现一次就递增一次
str++;
}
//遍历数组中第一个值为1的下标值即就是第一个只出现一次的字符
for(int i = 0;i<256;i++)
{
if(book[i]==1)
{
return (char)i;//强转回char字符
}
}
return '\0';//没找到则返回'\0'
}