题目来自《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;
}