查询字符串中第一个不重复的字符

题目要求:

找到字符串中第一个不重复的字符,并按原字符显示,要求可以区分大小写,默认不区分,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;
}

猜你喜欢

转载自blog.csdn.net/weixin_42909191/article/details/81514789