Jet_Shawn 发表于 2020-4-27 22:13:26

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;
        }
}

773254968 发表于 2020-4-28 09:29:08

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]
查看完整版本: C++ 运行卡壳