查詢字符串中第一個不重複的字符

題目要求:

找到字符串中第一個不重複的字符,並按原字符顯示,要求可以區分大小寫,默認不區分,true 表示區分, false表示不區分大小寫

示例:輸入Abcad,輸出b; 輸入Abcad true ,輸出A; 輸入Abcad false, 輸出 b

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


void
reverseStr(char* str)
{
    int ii = 0;
    int len = strlen(str);
    char temp;

    for (ii = 0; ii < len/2; ii++)
    {
        temp = str[len-1-ii];
        str[len-1-ii] = str[ii];
        str[ii] = temp;
    }
    return;
}


int
findlastworldlen(char* str)
{
    char* p_str = str;
    int count = 0;
    int len = strlen(str);
    int care_len = 0;
    int end_len = 0;
    int ii = 0;
    int flag0 = 0;
    int flag1 = 0;

    reverseStr(str);
    for (ii = 0; ii < len; ii++)
    {
        if (!flag1 && (*p_str != ' '))
        {
            flag0++;
            if (flag0 == 1)
            {
                care_len = ii;
            }
        }
        if (flag0 && (*p_str == ' '))
        {
            flag1++;
            if (flag1 == 1)
            {
                count =  ii - care_len;
            }
        }
        if (flag0 && flag1 && (*p_str != ' '))
        {
            end_len = ii;
            flag1 = 0;
            flag0 = 0;
            break;
        }
        p_str++;
    }
    if (end_len)
    {
        memmove(str, str+end_len, (len-end_len) * sizeof(char));
        memset(str+(len-end_len), 0, end_len * sizeof(char));
    }

    reverseStr(str);
    return count;
}

int
findSubStr(const char* str, const char* sub_str)
{
    const char* p_str = str;
    int len = 0;
    int ii = 0;
    int count = 0;

    if (!str || !sub_str)
    {
        return -1;
    }
    len = strlen(str);

    while (ii < len)
    {
        if (*p_str++ == *sub_str)
        {   
            count++;
        }
        ii++;
    }
    return count;
}

char
get_first(const char* str, int care)
{
    const char* p_str = str;
    char c[1] = {0};
    char c1[1] = {0};
    int len = strlen(str);
    int ii = 0;
    for (ii= 0 ; ii < len; ii++)
    {
        *c = *(p_str+ii);
        if (care)
        {
            if (1 == findSubStr(p_str, c))
            {
                return *c;
            }
        }
        else
        {
            *c1 = *c;
            if (*c >= 'a' && *c <= 'z')
            {
                *c = *c - 'a' + 'A';
            }
            else if (*c >= 'A' && *c <= 'Z')
            {
                *c = *c - 'A' + 'a';
            }
            else
            {
                continue;
            }
            if ((findSubStr(p_str, c) == 1) && (findSubStr(p_str, c1) == 0))
            {
                return *c1;
            }
            else if ((findSubStr(p_str, c) == 0) && (findSubStr(p_str, c1) == 1))
            {
                return *c1;
            }
        }
    }
    return 0;
}

int main()
{
    char str[256] = {0};
    int care = 0;
    char c = 0;

    while(gets(str))
    {
        if (str[0] == '\n')
        {
            break;
        }
        care = 0;
        if (findlastworldlen(str) == 4)
        {
            care = 1;
        }
        c = get_first(str, care);
        if (c)
        {
            printf("%c\n", c);
        }
        else
        {
            printf("%d\n", -1);
        }
        memset(str, 0 , sizeof(str));
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章