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

思路分析:采用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;
}

    效果如图:

posted @ 2014-03-24 22:30  源子陌  Views(564)  Comments(0Edit  收藏  举报