在字符串中找出只出现一次的字符。
我们可以使用哈希表结构解决此问题。以哈希表的键值作为字符,对应的出现次数为值。
具体代码如下:
// ConsoleApplication3.cpp : 定义控制台应用程序的入口点。
//计算只出现一次的字符
#include "stdafx.h"
#include<iostream>
#include<string>
using namespace std;
char FirstNotRepeatingChar(char* pString){
if (pString == 0)
return '\0';
const int tablesize = 256;
unsigned int hashTable[tablesize];
for (unsigned int i = 0; i < tablesize; i++){
hashTable[i] = 0;
}
char *p = pString;
while (*p != '\0'){
/*if (!hashTable[*p])
{
hashTable[*p] = 1;
}
else{
hashTable[*p]++;
}*/
hashTable[*(p++)]++;
}
p = pString;
while (*p != '\0'){
if (hashTable[*p] == 1){
return *p;
}
p++;
}
return '\0';
}
// ====================测试代码====================
void Test(char* pString, char expected)
{
if (FirstNotRepeatingChar(pString) == expected)
printf("Test passed.\n");
else
printf("Test failed.\n");
}
int _tmain(int argc, _TCHAR* argv[])
{ // 常规输入测试,存在只出现一次的字符
Test("google", 'l');
// 常规输入测试,不存在只出现一次的字符
Test("aabccdbd", '\0');
// 常规输入测试,所有字符都只出现一次
Test("abcdefg", 'a');
// 鲁棒性测试,输入NULL
Test(NULL, '\0');
system("pause");
return 0;
}