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

/*
题目描述:在字符串中找出第一个只出现一次的字符。例如字符串"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;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值