思路
一个字符占8位,那么它最多可以表示256种字符。因为每个字符都有一个ASCII码,所以可以定义一个用于记录字符出现次数的数组,用字符的ASCII码做为数组的下标,当遍历字符串时,就给相应下标对应的字符次数加1。这样对字符串的一次遍历就能记录每个字符出现的次数。再按字符的出现顺序,输出第一个出现次数为1的字符。
#include <iostream>
using namespace std;
//在字符串pszStr中查找只出现1次的字符并返回它
char FirstNotRepeatCharacter(char *pszStr)
{
if (NULL == pszStr)
{
return 0;
}
//创建一个大小为256的数组,用于存放字符出现的次数
int arr[256] = {0};
char *p = pszStr;
while (*p)
{
++arr[*p];
++p;
}
//返回那个第一次出现的字符
p = pszStr;
while(*p)
{
if (1 == arr[*p])
{
return *p;
}
++p;
}
}
int main()
{
char arr[] = "abaccdeff";
char ch = FirstNotRepeatCharacter(arr);
cout<<ch<<endl;
return 1;
}