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