#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循环中的一些问题如何解决它 使用上面的指针概念
答案 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;
}