1.具体实现如下
/***
功能:不用第三方库(意思是不要包含任何头文件),实现高效查找字符串中出现的第一个不重复字符
***/
long map[0x128] = {0};
/*
功能:获取ASCII字符串长度
*/
int len(char* str)
{
int len = 0,index =0;
while( str[index++] !='\0')len++;
return len;
}
/*
功能:根据给定的字符串返回第一个出现的不重复字符
返回:成功返回对应的字符,失败返回-1
*/
char get_one_char(char* str)
{
char tmp = 0;
int i,j;
/* 1.从头开始遍历每一个字符 */
for(i=0;i<len(str);i++)
{
/* 2.获取当前字符 */
tmp = str[i];
/* 3.以字符作为索引在map数组对应的位置计数+1 */
map[tmp] +=1;
/* 4.从i+1开始遍历,寻找是否有一样的字符 */
for(j=i+1;j < len(str); j++)
{
/* 5.如果有则map+1后跳出循环 */
if( str[j] == tmp)
{
map[tmp] += 1;
break;
}
}
/* 6.如果当前字符在map中的索引位置里面的技术是1,说明没有重复,直接返回 */
if(map[tmp] == 1)
{
return tmp;
}
}
/* 7.如果执行到这里来了,返回-1 */
return -1;
}
int main()
{
// 1.测试字符串
char* str = "asdfkasldfkasdflsadkfl;sakdsldfkl;askl;efk;lkfl;sdfkals;dkfl;asfl;aklfkasl;fklqwzxcv";
// 2.调用获取第一个不重复的字符函数
char chr = get_one_char(str);
// 3.如果等于-1直接返回
if (chr == -1)
return -1;
// 4.输出找到的字符
putchar(chr);
//5.输出换行
putchar('\n');
}
2.编译运行
$ gcc -w repeat.c -o re && ./re
e