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

题目

找出字符串中第一个只出现一次的字符_第1张图片

描述

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

详细描述:

接口说明
原型:
bool FindChar(char* pInputString, char* pChar);

输入参数:

char* pInputString:字符串

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

char* pChar:第一个只出现一次的字符
如果无此字符 请输出’.’

输入

输入一串字符

输出

输出一个字符

样例输入

asdfasdfo

样例输出

o

思路

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

重点!!!!
map 是根据关键字排序的!!!!
因此可以通过计数器将重复的字符设置为0,其余的就是出现一次的按照计数器,遍历的到最小的就是知道第一个出现一次的字符。
但是
对于指定次数的统计,如第一次只出现两次的字符,则需要进行处理,可以用结构体来实现,用结构体记录出现的位置、次数、字符。。。。同样可以解决。
找出字符串中第一个只出现一次的字符_第2张图片

代码

#include
#include
#include

using namespace std;

bool FindChar(string &str,char* pChar)
{
    bool flag=false;
    map<char, int> tempMap;
    int counter=1;
    //统计次数
    for(unsigned int i=0; iif(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->secondfirst;
            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<else{
        cout<<"."<return 0;
}

推荐测试用例
1. asdfasdfo (o)
2. aawd (w)
3. aabbcc (.)

找出字符串中第一个只出现一次的字符_第3张图片

你可能感兴趣的:(那些年我写过的渣代码)