回文判断,对于回文判断,不考虑输入中含有的字母数字外的字符,将这些字符删除掉进行判断:
bool NotAlphaNum(char ch)
{
return (!isalnum(ch));
}
string ReplaceNoCharCharacter(string& str)
{
//remove_if首先删除指定区域满足断言的字符,但是这个函数不能删除相应的内存,只是把删除剩下的字符放到了字符串的开始,然后返回删除后字符串的超尾迭代器
//因此需要再使用erase删除之
str.erase(remove_if(str.begin(),str.end(),NotAlphaNum),str.end());
return str;
}
bool MyIsPalindrome(string& str)
{
string str1(str);
//如果考虑要去除字符串中的非数字和字母,则需要加上这行
//str1=ReplaceNoCharCharacter(str1);
reverse(str1.begin(),str1.end());
if (str1==str)
{
return true;
}
return false;
}
因为是为了学习STL,所以所有的实现都是依靠STL相关函数完成,可能实现不是最佳选择,下面是删除一个字符串中重复次数最少字符的函数:
string DelChar(string& str)
{
vector<char> vecC;
map<char,int> charCount;
int icount=10000;.//这个值是假定的重复的最大次数,可以酌情修改
//遍历整个字符串,把相应的字符和重复的次数存入一个map中,并找到最少次数icount
for (string::iterator ite=str.begin();ite!=str.end();ite++)
{
charCount[*ite] = count(str.begin(),str.end(),*ite);
icount = (charCount[*ite]<icount?charCount[*ite]:icount);
}
//从string中删除字符
for (map<char,int>::iterator iter=charCount.begin();iter!=charCount.end();++iter)
{
if (iter->second==icount)
{
str.erase(remove(str.begin(),str.end(),iter->first),str.end());
}
}
return str;
}