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

有两种方法,第一种利用哈希表

由于字符char是一个长度为8的数据类型,总共有256中可能,于是我们创建一个长度为256的数组,每个字母根据其ASCII码值作为数组的下标对应于数组的对应项,数组中存放的的是每个字符出现的次数,这样我们就建立了一个大小为256,键值为ASCII码的哈希表。程序如下:

注意:容易在第二次循环时忘记再次给PHashKey赋值,使其指向字符串的开始,否则无输出值。

#include <iostream>

using namespace std;
char FirstNotRepeatingChar(char* pString)
{
 if(!pString)
  return 0;
 const int tableSize=256;
    unsigned int hashTable[tableSize];
 for(unsigned int i=0;i<tableSize;++i)
 {hashTable[i]=0;
 }
 char* pHashKey=pString;
 while(*(pHashKey)!='\0')
 {
  hashTable[*(pHashKey++)]++;
 }
 pHashKey=pString;//at first I forget initialize the pHashKey again!
    while(*(pHashKey)!='\0')
 {
  if(hashTable[*pHashKey]==1)
   return *pHashKey;
  pHashKey++;
 }
 return 0;
}
void main()
{
 char a[]="abcfabcd";
 char result=FirstNotRepeatingChar(a);
 cout<<result<<endl;
}

第二种方法:

#include <iostream>


using namespace std;
char FirstSingleChar(char* pstr)
{
 const int tableSize=256;
unsigned int a[tableSize];

 //unsigned int a[256];
 //for(unsigned int i=0;i<=255;i++)
 for(unsigned int i=0;i<tableSize;++i)
  a[i]=0;
 char *p=pstr;
 while(*p!='\0')
 {
  a[*p]++;
  p++;
 }
 p=pstr;
 while(*p!='\0')
 {
  if(a[*p]==1)
   return *p;
  p++;
 }
 return 0;
}
void main()
{  
 char s[]="abcdabc";
 //char *q=s;
 
 //cout<<a;
    char result=FirstSingleChar(s);
 cout<<result<<endl;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值