|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 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[100];
- 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[i]>='a'&&a[i]<='z')
- {
- *(p1+n) = a[i]-32; // 给对应的内存空间存入数值 小写转大写
- }
- else if(a[i]>='A'&&a[i]<='Z')
- {
- *(p1+n) = a[i];
- }
- 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--;
}
以上是一种新思路。
|
-
|