在字符串中找出第一个只出现一次的字符

来源:互联网 发布:sql查询分析器要联网吗 编辑:程序博客网 时间:2024/06/01 07:36
/*题目描述:在字符串中找出第一个只出现一次的字符。例如字符串"abaccdeff",则输出'b'。*/#include <stdio.h>#define CHAR_SIZE 256#define NONE-1//字符没有出现过#define MORE-2//字符出现2次及2次以上int main(void){int i;int index = 9999;//记录第一个出现一次字符的位置,初始值要大于字符串大小即可char *SourceBuf = "abcdefghijklmn@#$%^&*()nmlkjigedbca";char *tmpbuf = SourceBuf;/************************************每个字符对应一个数组成员*当字符未出现过,成员 = NONE(-1)*当字符出现1次,成员 = 字符第一次出现的位置*当字符出现2次及两次以上,成员 = MORE(-2)***********************************/int CharIndex[CHAR_SIZE];//记录没个字符在字符串中出现的次数for(i = 0;i < CHAR_SIZE;i++)//初始化记录数组{CharIndex[i] = NONE;}i = 0;/*********************************SourceBuf不能够移动!!!!!!********************************/while(*tmpbuf != '\0')//遍历字符串{if(CharIndex[*tmpbuf] == NONE)//该字符未出现过{CharIndex[*tmpbuf] = i;//记录字符在字符串中的位置}else if(CharIndex[*tmpbuf] > NONE)//该字符已出现一次{//该字符出现2次及以上,无需关注其在字符串中的位置CharIndex[*tmpbuf] = MORE;}tmpbuf++;i++;}//查找第一个只出现一次的字符for(i = 0;i < CHAR_SIZE;i++){if(CharIndex[i] > NONE)//未出现过及出现2次及以上的,忽略掉{if(CharIndex[i] < index)//找到字符串中下标最小的{index = CharIndex[i];}}}printf("The source data is :\n%s\n\n",SourceBuf);printf("The char we searched for is %c\n",SourceBuf[index]);return 0;}

原创粉丝点击