C语言实现: 查找给定串中第一个只出现一次的字符。

算法思想:

1.在C语言中,char类型的本质是一个1个字节的整型 .我们不妨使用一个数组,用字符对应的ASCALL码值作为数组的下标。字符在给定串中出现的次数,做为数组对应下标的元素值。由于无符号char类型最大值为255,故一个长为255的数组足以记录给定串中任意字符出现的次数(只考虑英文字符)。

2.遍历该数组,其中值为1的元素,其下标值就是给定串中只出现一次的字符的ASCALL码值。也就是下标值对应的字符在给定串中只出现一次。

3.依次查询这些字符在给定串中的地址,得出其中的最低地址,即为串中第一个只出现一次的字符。

不啰嗦了!上代码。

//在一个串中,找到第一个不重复的字符,并返回

#include
#include
#include


char getch( char *str)
{
	int  count[255] = { 0 };    //定义一个长度为255的数组,以字符的ascall码作为数组下标,在对应下标处,记录给定串中,每个字符出现的次数。
	int i = 0;
	char *p = NULL, *tmp = NULL;
	

	//如果给定串中第i个字符不为0, 就把该字符转化成对应的ascall码,作为count数组的对应下标,并另其元素值自增,,然后指针i在加1,继续在给定串下一个位置继续判断
	for ( ;  str[i] ;  ++count[ str[i++] ] );

	for (i = 0; i < 255; ++i)
	{
		//ascall码为i的字符出现的次数,在给定串中是1次
		if (count[i] == 1)
		{
			
			if ((tmp = strchr(str, i)) < p) //找到出现次数为1的字符的位置,与之前的出现次数为1的字符,比较在给定串的位置,p始终指向小的位置
			{
				p = tmp;
			}
			
			else if(p == NULL)
			{
				p = strchr(str, i);
			}
			
		}
		
	}
	printf("%c\n", *p);
	return *p;
}



int main(void)
{
	char str[] = "aabbcdMiifeklJHDFKHef";
	char s1 = getch(str);
	
 
	printf("%c ", s1);
	system("pause");
	return 1;
}

 

你可能感兴趣的:(C语言面试题)