鱼C论坛

 找回密码
 立即注册
查看: 998|回复: 1

[已解决]C++ 运行卡壳

[复制链接]
发表于 2020-4-27 22:13:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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;
        }
}
最佳答案
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.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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--;
}

以上是一种新思路。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-14 18:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表