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 && ./ree
