输入字符串a,用指针,将其中数字,字母分别剔除并按原来顺序字符串b和c里,最后分别输出a,b,c三个字符串

/*指针应用之字符分捡

这是题目,接下来是我的代码

输入一个字符串a,使用指针,将其中数字,字母分别剔除并按原来顺序保存在新的字符串b和c里,最后分别输出a,b,c三个字符串,为了保证不输出空行,程序在每个输出串前添加了一个空格。

输入输出样例:
123abc#$abc456
result:
#$
123456
abcabc

程序的主要框架已经给出,请仅在
********** Begin **********

 **********   End  ***********

注释对之间的空行中添加你的代码,任何修改该两行注释,以及修改注释外代码均将被判失败

f函数内部已经定义好变量和输入输出,你的代码中只能利用已经定义的变量,禁止定义新的变量。
程序的输入输出已经写好,你的代码不需要执行输入输出功能。
/
#include
#include
#define N 256
#define BUFSZ N
void f()
{
char a[N],b[N],c[N],*p1,*p2,*p3,*p;
gets(a);
/
********* Begin **********/

/********** End ***********/
printf("result:\n");
printf(" ");puts(a);
printf(" ");puts(b);
printf(" ");puts(c);
}
int main()
{
f();
return 0;
}

我的代码:
/********** Begin **********/
p=&a[0];
for(p=0;p!='\0';p++)
{ if((*p9)&&(*p<'a'||*p>'z')&&(*p<'A'||*p>'Z'))
{*p1=*p;
p1++;}

else if(*p>=0&&*p<=9)
{p2=&b[0];
*p2=*p;
p2++;}
else if((*p>='a'&&*p<='z')||(*p>='A'&&*p<='Z'))
{p3=&c[0];
*p3=*p;
p3++;}
*p1='\0';
*p2='\0';
*p3='\0';
}

/********** End ***********/
输出来是图片说明

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^