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

//描述:  找出字符串中第一个只出现一次的字符
//详细描述:
//接口说明
//原型:
//bool FindChar(char* pInputString, char* pChar);
//输入参数:
//char* pInputString:字符串
//输出参数(指针指向的内存区域保证有效):
//char* pChar:第一个只出现一次的字符
//如果无此字符 请输出'.' 
//知识点:  字符串,循环  
//题目来源:  内部整理  
//练习阶段:  初级  
//运行时间限制: 10Sec 
//内存限制: 128MByte 
//输入:  
//输入一串字符 
//输出:  
//输出一个字符
//样例输入: 
//asdfasdfo                   
//样例输出: 

//o

思路:先统计出字符串中存在字符的出现次数,再重新遍历一次找出第一个只出现一次的字符

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

typedef enum {
	ERROR=0,
	SUCCESS=~ERROR
}boolean;

struct mypnode;
typedef struct mypnode{
	char ch;
	int num;
	struct mypnode *next;
}pnode;

boolean findchar(char* str, char* pchar){
	int str_len=0,k;
	pnode *phead=NULL, *ptemp;

	str_len = strlen(str);
	for(k=0; k<str_len; k++){
		ptemp = phead;
		while(ptemp){
			if(ptemp->ch==str[k]){
				ptemp->num++;
				break;
			}
			ptemp = ptemp->next;
		}
		if(ptemp==NULL){
			if((ptemp=(pnode*)malloc(sizeof(pnode)))==NULL)
				return ERROR;
			ptemp->next = phead;
			ptemp->ch = str[k];
			ptemp->num = 1;
			phead = ptemp;
		}
	}

	for(k=0; k<str_len; k++){
		ptemp = phead;
		while(ptemp){
			if(ptemp->ch == str[k]){
				if(ptemp->num==1){
					*pchar = str[k];
					return SUCCESS;
				}
			}
			ptemp = ptemp->next;
		}
	}
	return ERROR;
}

int main(void){
	char str[100], ch;

	if(gets(str)==NULL)
		exit(0);

	if(findchar(str, &ch)==ERROR)
		printf(".");
	else
		printf("%c", ch);

	system("pause");
	return 0;
}



原文地址:https://www.cnblogs.com/xhyzjiji/p/6159388.html