在palindrome程序中这个指针是什么我不能得到正确的结果

时间:2015-10-06 14:24:25

标签: c pointers

#include<stdio.h>

int main()
{
    int flag=0,length=0;
    char name[30];
    char *p,*q;
    printf("enter the name you want to enter\n");
    scanf("%[^\n]",name);
    p=name;
    q=name;
    while(*p++) length++;
    printf("%d\n",length);
    while((*q++==*--p))
    {
        printf("%c\t%c\n",*q,*p);
        flag=1;
    }
    if(flag==0)
        printf("palindrome\n");
    if(*--q!=*p)
        flag=0; 
    if(flag==1)
        printf("palindrome\n");
    else
        printf("not a palindrome\n");
    return 0;
}

看到我用指针检查字符串我不知道是什么问题 这是while循环中的一些问题如何解决它 使用上面的指针概念

2 个答案:

答案 0 :(得分:1)

只有当所有镜像字符匹配时,它才是回文。所以循环后的条件是p在开头回来了:

while((*q++==*--p) && p>=name)
{
    printf("%c\t%c\n",*q,*p);
}
if (p==name) flag= 1;
if(flag==0)
    printf("not a palindrome\n");
else
    printf("palindrome\n");

答案 1 :(得分:0)

从字符串开始更简单,请尝试:

 #include <usual.h>

int main(  )
{
  int flag = 0;
  int length = 0;
  int len2 = 0;
  int i = 0;
  char name[130];
  char p[130];
  char q[130];

  printf( "please enter a name or sentence\n" );
  scanf( "%[^\n]", name );

  length = strlen( name );
  len2 = length;
  strcpy( p, name );
  memset( q, '.', length ); // handy to debug comparaison
  q[length] = '\0';

  for ( i = 0; i < length; i++ )
  {
    q[--len2] = p[i];
  }

  printf( "\n p==%s", p );
  printf( "\n q==%s", q );
  getchar(  );

  if ( !strcmp( p, q ) )
    flag = 1;

  if ( flag == 1 )
    printf( "\npalindrome\n" );
  else
    printf( "\nnot a palindrome\n" );

  return 0;
}