//详细描述:
//接口说明
//原型:
//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; }