C++ 运行卡壳
本帖最后由 Jet_Shawn 于 2020-4-27 22:35 编辑笔者在输入字符串后,没有反应,麻烦帮忙看看
题目要求:
编写一个函数parlin()用来检测一个字符串是否为正向拼写与反向拼写都一样的回文
在主函数中输入字符串
将字符串首指针作为函数参数传递到函数palin()中,当字符串为回文,返回true,否则false
若是回文,在主函数中输入yes,否则输出no
*/
# include<iostream>
using namespace std;
bool palin(char a[]);
int main()
{
char a;
cout<<"请输入字符串"<<endl;
cin>>a;
if(palin(a) == true)
{
cout<<"yes"<<endl;
}
else
{
cout<<"no"<<endl;
}
system("pause");
return 0;
}
bool palin(char a[])
{
char *p1 = a; // 获得a的首地址
char *p2;
int i, n;
n = 0;
for (i = 0; i < 100; i++)
{
if(a>='a'&&a<='z')
{
*(p1+n) = a-32; // 给对应的内存空间存入数值小写转大写
}
else if(a>='A'&&a<='Z')
{
*(p1+n) = a;
}
else
{
n++;
continue;
}
n++;
}
// 一步一步判断字符是否相同,直到最后一位
for (p2 = p1 + n; p1<p2;)
{
if(*p1 == *p2)
{
p1++;
p2--;
}
}
// 进行到最后一步,如果总长度为偶数,那么相减为1;如果为奇数,相减为0
if(p2 - p1 ==1||p2 - p1 == 0)
{
return true;
}
else
{
return false;
}
} if(*p1 == *p2)
如果我理解的for语法没问题的话。这一句如果不等于的话循环不会停止。
其实有更好的写法。
p1 = a;
p2 = p1 + length(a);
for (i = 0; i < length(a); i++)
{
if(*p1 != *p2)
{return false;}
p1++;p2--;
}
以上是一种新思路。
页:
[1]