在字符串中找出第一个只出现一次的字符

     eg:输入“abcdefadef”,则输出'b'

分析:

  每一个字母都有对应的ASCII值,大小不超过256,因此只需建立一个全为0的数组,若值为97的字母出现一次,则数组下标为97的值加1,以此类推。

  因此只需找出变化后数组元素第一个1的下标,输出对应的字母即可。

代码如下:



#define _CRT_SECURE_NO_WARNINGS 1 
#include<stdio.h>
#include<iostream>
int find(const char *str)
{
const char *tmp = str;
unsigned char arr[256] = { 0 }; //表示每个字母出现0次
while (*tmp)
{
arr[*tmp]++;
tmp++;
}
tmp = str;
while (*tmp)
{
if (arr[*tmp] == 1)
return *tmp;
tmp++;
}
return -1;
}
int main()
{
char *p= "abcdefadef";
char ret=find(p);
printf("%c\n", ret);
system("pause");
return 0;
}

注意:寻找只出现了一次的字母时,不能在数组里从前往后寻找。要按字符串字母出现的顺序查找。

运行结果如下:

在字符串中找出第一个只出现一次的字符_数组