您的位置:首页 > 编程语言 > C语言/C++

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

2016-12-21 22:08 197 查看

题目



描述

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

详细描述:

接口说明


原型:


bool FindChar(char* pInputString, char* pChar);


输入参数:

char* pInputString:字符串

输出参数(指针指向的内存区域保证有效):

char* pChar:第一个只出现一次的字符

如果无此字符 请输出’.’

输入

输入一串字符

输出

输出一个字符

样例输入

asdfasdfo

样例输出

o

思路

统计出现次数,输出第1次出现次数为1的字符。

重点!!!!

map 是根据关键字排序的!!!!

因此可以通过计数器将重复的字符设置为0,其余的就是出现一次的按照计数器,遍历的到最小的就是知道第一个出现一次的字符。

但是

对于指定次数的统计,如第一次只出现两次的字符,则需要进行处理,可以用结构体来实现,用结构体记录出现的位置、次数、字符。。。。同样可以解决。



代码

#include<iostream>
#include<string>
#include<map>

using namespace std;

bool FindChar(string &str,char* pChar)
{
bool flag=false;
map<char, int> tempMap;
int counter=1;
//统计次数
for(unsigned int i=0; i<str.size(); i++)
{
if(tempMap.find(str[i]) == tempMap.end())
tempMap[str[i]] = counter++;
else
tempMap[str[i]]=0;
}
//找第一次出现的字符
int minNumber=counter;
for(map<char, int>::iterator iter = tempMap.begin(); iter!=tempMap.end(); ++iter)
{
if((iter->second!=0)&&(iter->second<minNumber)){
(*pChar) = iter->first;
flag=true;
minNumber=iter->second;
}
}
return flag;
}
int main()
{
string s;
char pChar;
bool result=false;
getline(cin,s);
result = FindChar(s,&pChar);//找第一次出现的字符
if(result){
cout<<pChar<<endl;
}else{
cout<<"."<<endl;
}
return 0;
}


推荐测试用例

1. asdfasdfo (o)

2. aawd (w)

3. aabbcc (.)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 字符串