如何在字符串里查找第一个不重复的字母,即只出现一次的最靠前的字母

      我在写这个程序时突然想起一个问题,就是C语言里给int一维数组初始化赋值的问题,比如我写:

int index[11]={0}; 那么此时数组中所有的元素初始化值均为0;但是我写:

int index[11]={-1};此时我以为所有元素的值均为-1了,其实不是这样的,当{}中的值的个数小于数组元素个数时,只有数组前面对应的元素被赋值了,而后面多余的元素被默认初始化为0了,所以这句话执行后,只有index[0]的值为-1,而其余元素均为0;但是如果我这样写:

int index[11]; 那么你也不要天真地以为所有元素默认值均为0,其实不然,这样写的话,所有元素的值均为随机值。

 

这就是数组初始化时我们应该注意的地方。好了,下面说说这个算法:

源代码如下:

 

#include <iostream>

using namespace std;

char findIt(const char *str);
int main()
{
    char str[]="iamastudenti";

    cout << findIt(str) << endl;
    return 0;
}

char findIt(const char *str)
{
    int count[26]={0};
    int index[26]={0};  //注意int数组初始化赋值时,如果写成={-1}是不能给所有元素初始化为-1的,只有第一个元素是-1,其余为默认值0
    unsigned int i;
    int pos;
    for(i=0;i<strlen(str);i++)
    {
        count[str[i]-'a']++;   //记录该字母出现的次数
       // cout<<count[str[i]-'a']<<endl;
        if(index[str[i]-'a']==0)
        {
            index[str[i]-'a']=i;  //记住该字母第一次出现时的索引
        }
    }
    pos=strlen(str);
    for(i=0;i<26;i++)
    {
        if(count[i]==1)  //找到只出现一次的字母
        {
            if(index[i]!=-1&&index[i]<pos)  //在只出现一次的字母中找出索引值最小的即可
            {
                pos=index[i];
            }
        }
    }
    if(pos<strlen(str))
        return str[pos];
    return '\0';
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值