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

题目:

在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。   


分析:

这道题是2006年google的一道笔试题。

ASCII码共有128个,所以可以建一个包含128个元素的数组,初始化为0。扫描字符串,出现某字符,就自增该字符

对应的ASCII值为下标的元素值!


代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int count[128];  //count数组存储每个字符出现的次数

void CountTimes(char *str); //计算str数组中每个字符出现的次数

int main()
{
	char str[100]; //存储字符串
	while (printf("Please input a string :  "),fgets(str,sizeof(str),stdin)!=NULL)
	{
		CountTimes(str); 
	}

	return 0;
}

void CountTimes(char *str)
{
	int len,i;
	len=strlen(str)-1;  //fgets读入的字符串末尾会多一个换行符,ASCII值为10,故减一
	memset(count,0,sizeof(count));

	for (i=0;i<len;i++)
	{
		count[str[i]]++;
	}

	//下面做法是错误的,感谢tongjianfeng
	//for (i=0;i<128&&count[i]!=1;i++);//寻找第一个出现一次元素的下标
	//printf("The character which appears only once is  :  %c\n\n",i);

	//修改如下:
	for (i=0;i<len;i++)
	{
		if (count[str[i]]==1)
		{
			printf("The character which appears only once is : %c\n\n",str[i]);
			return ;
		}
	}
	
}





评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值