如何找出一个字符串中第一个只出现一次的字符
思路分析:采用hash法来实现,首先申请一个长度为256的表,对每个字符hash计数即可。因为C/C++中的字符有3种类型:char、signed char和unsigned char。char类型的符号是由编译器指定的,一般是有符号的。在对字符进行hash时,应该先将字符转为无符号类型;否则当下标为负值时,就会出现越界访问。此外,还需要一个数组记录当前找到的只出现一次的字符,避免对原字符串进行第二次遍历。
代码如下:
#include "stdafx.h" #include <stdio.h> char GetChar(char str[]) { if (str == NULL) return 0; const int size = 256; unsigned count[size] = { 0 }; char buffer[size]; char *q = buffer; const char* p; for (p = str; *p != 0; p++) { count[(unsigned char)*p]++; if (count[(unsigned char)*p] == 1) { *q = *p; q++; } } for (p= buffer; p < q;p++) if (count[(unsigned char)*p] == 1) return *p; return 0; } int main() { printf("%c\n", GetChar("abac")); getchar(); return 0; }
效果如图: