判断一个字符串是否为回文,比如说单词“level”就是回文。我们可以从一个字符串的两端进行遍历比较,例如对于level我们可以进行下面的步骤。
(1)计算需要比较的次数。由于“level”字符串长度为5,是奇数,因此比较两次
(2)第一次比较:看“level”的第一个字符与最后一个字符是否相等,若相等,则进行第二次比较。
(3)第二次比较:看“level”的第二个字符与倒数第二个字符是否相等,若相等则是回文
如果在上面的比较过程中有一个不相等,则字符串不是回文。根据上面的思路,我们可以写出如下的程序代码:
#include <iostream>
using namespace std ;
int IsRevStr(char *str )
{
int i,len ;
int found = 1 ; //1表示是回文 0则不是
if(str == NULL)
{
return -1 ;
}
len = strlen(str) ;
for(i = 0 ;i<len/2;i++) //遍历中如果发现相应的头尾字符串不等,则字符串不是回文
{
if(*(str+1) != *(str+len-i-1))
{
found = 0 ;
break ;
}
}
return found ;
}
int main()
{
char str1[10] = "1234321" ;
char str2[10] = "1234221" ;
int test1 = IsRevStr(str1) ;
int test2 = IsRevStr(str2) ;
cout<<"str1 is "<<(test1 == 1 ? "" : "not")<<"reverse string."<<endl ;
cout<<"str2 is "<<(test2 == 1 ? "" : "not")<<"reverse string."<<endl ;
return 0 ;
}
这个程序中的IsRevStr()函数用于判断字符串是否为回文字符串,如果是则返回1,否则返回0.输出结果:
1 str1 is reverse string.
2 str2 is not reverse string.