/*
题目描述:在字符串中找出第一个只出现一次的字符。例如字符串"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;
}
在字符串中找出第一个只出现一次的字符
最新推荐文章于 2023-07-23 22:43:46 发布