题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。
思路:ASCII码表总共只有255个字符,只需建立一个整型数组分别存储每一个字符出现的次数,再顺序遍历字符串,查找其对应的在字符串中出现的次数,首先只出现一次的字符就是我们需要的字符。
基于以上分析,代码如下:
1 char FirstOnceChar(const char *Str) 2 { 3 assert (Str != NULL); 4 5 // ASCII总共只有255个字符 6 int Count[255]; 7 8 memset (Count, 0, 255 * sizeof (int)); 9 10 const char *pStr = Str; 11 12 while (*pStr != '\0') 13 { 14 ++Count[*pStr]; 15 ++pStr; 16 } 17 18 pStr = Str; 19 while (*pStr != '\0') 20 { 21 if (1 == Count[*pStr]) 22 { 23 return (*pStr); 24 } 25 26 ++pStr; 27 } 28 29 // 如果没有一个字符是只出现一次的,那么返回空字符 30 return ('\0'); 31 }
一些测试结果: