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