鱼C论坛

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

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

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

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

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

x
本帖最后由 Jet_Shawn 于 2020-4-27 22:35 编辑

笔者在输入字符串后,没有反应,麻烦帮忙看看

  1. 题目要求:
  2.                 编写一个函数parlin()用来检测一个字符串是否为正向拼写与反向拼写都一样的回文
  3.                 在主函数中输入字符串
  4.                 将字符串首指针作为函数参数传递到函数palin()中,当字符串为回文,返回true,否则false
  5.                 若是回文,在主函数中输入yes,否则输出no
  6. */

  7. # include<iostream>
  8. using namespace std;

  9. bool palin(char a[]);

  10. int main()
  11. {
  12.         char a[100];
  13.         cout<<"请输入字符串"<<endl;
  14.         cin>>a;
  15.        
  16.         if(palin(a) == true)
  17.         {
  18.                 cout<<"yes"<<endl;
  19.         }
  20.         else
  21.         {
  22.                 cout<<"no"<<endl;
  23.         }
  24.        
  25.         system("pause");
  26.         return 0;
  27. }

  28. bool palin(char a[])
  29. {
  30.         char *p1 = a; // 获得a的首地址
  31.         char *p2;
  32.         int i, n;
  33.         n = 0;
  34.         for (i = 0; i < 100; i++)
  35.         {
  36.                 if(a[i]>='a'&&a[i]<='z')
  37.                 {
  38.                         *(p1+n) = a[i]-32; // 给对应的内存空间存入数值  小写转大写
  39.                 }
  40.                 else if(a[i]>='A'&&a[i]<='Z')
  41.                 {
  42.                         *(p1+n) = a[i];
  43.                 }
  44.                 else
  45.                 {
  46.                         n++;
  47.                         continue;
  48.                 }
  49.                 n++;
  50.         }
  51.        
  52.          // 一步一步判断字符是否相同,直到最后一位
  53.         for (p2 = p1 + n; p1<p2;)
  54.         {
  55.                  if(*p1 == *p2)
  56.                  {
  57.                          p1++;
  58.                         p2--;       
  59.                 }
  60.         }
  61.          
  62.          // 进行到最后一步,如果总长度为偶数,那么相减为1;如果为奇数,相减为0
  63.         if(p2 - p1 ==1||p2 - p1 == 0)
  64.         {
  65.                  return true;
  66.         }
  67.         else
  68.         {
  69.                  return false;
  70.         }
  71. }
复制代码
最佳答案
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, 2024-4-28 11:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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