验证一个字符串是否是回文
思路:先将字符串中的字母全部转成大写或小写,再依次比较两端字符
class Solution {
public:
bool isLetterOrNumber(char ch)
{
if((ch>='a'&&ch<='z')||(ch>='0'&&ch<='9'))
return true;
else
return false;
}
bool isPalindrome(string s) {
for(size_t i=0;i<s.size();i++)
{
s[i]=tolower(s[i]);//大写字符转小写
}
int begin=0;
int end=s.size()-1;
while(begin<end)
{
while(!isalnum (begin<end&&s[begin]))//注意加判断条件begin<end,防止越界访问
begin++;
while(!isalnum (begin<end&&s[end]))
end--;
if(s[begin]!=s[end])
return false;
begin++;
end--;
}
return true;
}
};
注:循环begin++或end++要加判断条件begin<end,而且要加在最前面,防止其他的判断条件已经造成越界访问
这里介绍两个函数 tolower函数和 toupper函数
tolower函数
把字符转换成小写字母,非字母字符不做出处理
头文件:在VC6.0可以是ctype.h或者stdlib.h,常用ctype.h
toupper函数
将小写英文字母 转换为大写英文字母
头文件:#include <ctype.h>;
说明:如果c为小写英文字母,则返回对应的大写字母;否则返回原来的值。
int main()
{
string s("aBscJECWBJ121*&^#@2GSDEJWCW");
for (size_t i = 0; i < s.size(); i++)
{
s[i] = tolower(s[i]);
}
cout << s << endl;
for (size_t i = 0; i < s.size(); i++)
{
s[i] = toupper(s[i]);
}
cout << s << endl;
return 0;
}