题目:检测回文字符串
描述:判断输入的字符串是否是回文字符串。回文宇符串是指正向和反向拼写都相同的字符串。
要求:忽略字符串中的非字母字符,只考虑宇母宇符的比较。在判断回文性时,不区分字母的大小写。遍历宇符串时必须采用字符指针实现。
提示:可以使用两个指针,一个指向字符串的起
始位置,另一个指向宇符串的末尾位置,逐个字符进行比较,直到两个指针相遇。在比较字符
时,可以忽略非字母字符,只比较字母字符的小写形式。
如果遇到不匹配的宇符,则宇符串不是回文字符串。如果两个指针相遇,字符串是回文字符串。
示例:
输入:str =mevel"
输出:true
输入:str = mle23vel
输出:true
输入:str = mhello"
输出:false
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int main()
{
int i,j,n=0,flag;
char a[101];
cin.getline(a,sizeof(a));
int k = 0;
for (i = 4; a[i]; i++) //这里不知道你的输入是否有str=开头,如果没有,那么i=0
{
if (a[i] >= 'a' && a[i] <= 'z')
a[k++] = a[i] - 'a' + 'A';
else if (a[i] >= 'A' && a[i] <= 'Z')
a[k++] = a[i];
}
a[k] = '\0';
// cout << a << endl;
n=strlen(a);
flag=0;
for (i=0,j=n-1;i<n/2;i++,j--)
if (a[i]!=a[j])
flag=1;
if (!flag)
cout<<"true"<<endl;
else
cout<<"false"<<endl;
return 0;
}
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char s[100]; //定义一个字符数组,用于存放输入的字符串
char *p1, *p2; //定义两个指针,一个指向字符串的起始位置,另一个指向字符串的末尾位置
printf("Please enter a string: ");
fgets(s, 100, stdin); //fgets()可读入含空格的字符串
p1 = s; //p1指向字符串的起始位置
p2 = s + strlen(s) - 1; //p2指向字符串的末尾位置,用strlen(s)-1可以跳过字符串的结束符'\0'
while (p1 < p2) { //只要p1和p2没有相遇则继续判断
while (!isalpha(*p1) && p1 < p2) //跳过非字母字符
p1++;
while (!isalpha(*p2) && p1 < p2)
p2--;
if (tolower(*p1) != tolower(*p2)) { //忽略大小写比较
printf("%s is not a palindrome string.\n", s);
return 0;
}
p1++; //指针后移
p2--;
}
printf("%s is a palindrome string.\n", s);
return 0;
}