作业帮 > 综合 > 作业

回文串判断C++如果一个字符串正反看(左到右,右到左)是相同的称为回文.编程判断从键盘输入的任意一个串是否回文.注:汉字

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/10/02 17:42:50
回文串判断C++
如果一个字符串正反看(左到右,右到左)是相同的称为回文.编程判断从键盘输入的任意一个串是否回文.注:汉字和非汉字分别处理,判断是否汉字的标志是汉字ASCII码是为负数,同时处理一个汉字通过成对字符数组元素比较完成.如:若汉字串为str1[31]="红黑红黑红",串长n=10第一个汉字与最后一个汉字的比较是 str1[0]==str1[n-2]&&str1[0+1]==str1[n-1].strrev()函数不能用于汉字.
#include <cstdio>
using namespace std;
bool isPalindrome(char inStr[])
{
char* pl = inStr;
char* pr = inStr;
while (*pr != 0) pr++;
pr--; //pr指向最后一个字符
while (pl < pr)
{
if (*pl < 0) //中文
{
if(pl[0] != pr[-1] || pl[1] != pr[0])
{
return false;
}
else
{
pl += 2;
pr -= 2;
}
}
else if(*pl++ != *pr--)
{
return false;
}
}
return true;
}
int main()
{
char buf[500] = {0};
scanf("%s",buf);
if (isPalindrome(buf))
{
printf("是回文\n");
}
else
{
printf("不是回文\n");
}
return 0;
}
再问: 不用指针
再答: 用不用指针都差不多啦, 没有指针版本:bool isPalindrome(char inStr[])
{
int il = 0;
int ir = 0;
while (inStr[ir] != 0) ir++;
ir--; //ir是最后一个字符索引
while (il < ir)
{
if (inStr[il] < 0) //中文
{
if(inStr[il] != inStr[ir-1] || inStr[il+1] != inStr[ir])
{
return false;
}
else
{
il += 2;
ir -= 2;
}
}
else if(inStr[il++] != inStr[ir--])
{
return false;
}
}
return true;
}不觉得两段代码很像么?
再问: 还是看不大懂,和我们学的不太一样,这是C++么
再答: 额...你哪边觉得它不是C++呢, 除了scanf和printf是C库中的函数外...