是否回文的判断(c语言,初级接触指针)

题目来自《C语言程序设计—现代方法》12章第5题:
输入一段信息,忽略所有不是字母的字符,然后判断这条消息是否回文。
a.用整型变量跟踪数组内的位置

#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define N 50

main()
{

  char a[N],b[]={'0'};
  int len_a=0,len_b=0,flag=0;
  int i=0,j=0;

  for(i=0;i<N;i++)
  {
    scanf("%c",&a[i]);
    len_a++;
    if(a[i]=='\n')
      break;

  }

  for(i=0,j=0;i<len_a;i++)
  {
    if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z'))
    { 
      b[j]=tolower(a[i]);
      j++;
      len_b++;
    }
  }

  for(j=0;j<len_b;j++)
    printf("%c",b[j]);

  printf("\n");

  for(i=0,j=len_b-1;i<j;)
    {
      if(b[i]!=b[j])
      {
        printf("not");

        flag++;
        break;
      }
      i++;
      j--;
    }

  if(flag==0)
    printf("yes");

  return 0;
}

b.用指针代替整数跟踪数组的位置

#include<stdio.h>
#include<ctype.h>
#define N 50

main()
{

  char a[N],b[]={'0'};
  int len_a=0,len_b=0,flag=0;
  char *p,*q,*r;
  p=a;
  q=b;

  for(p=a;p<a+N;p++)
  {
    scanf("%c",p);
    len_a++;
    if(*p=='\n')
      break;   
  }

  for(p=a;p<a+len_a;p++)
  {
    if((*p>='a'&&*p<='z')||(*p>='A'&&*p<='Z'))
    { 
      *q=tolower(*p);
      q++;
      len_b++;
    }
  }

  for(q=b;q<b+len_b;q++)
    printf("%c",*q);
  printf("\n");

  r=b+len_b-1;
  q=b;//重新指向b[0] 
  for(;q<r;)
    {
      if(*q!=*r)
      {
        printf("not\n");

        flag++;
        break;
      }
      q++;
      r--;
    }
  if(flag==0)
    printf("yes\n");

  return 0;
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值