在刷二级题库的时候看到这道题目,指针学的着实不够好,那就写一下写一下。
题目描述大体上是这样的:有这样一个字符串,由字母和*组成,删除其中所有的*,但是末尾的*不能删除。定义了一个指针已经指向了最后一个字母。
例如: ***AB***C*D***DCF******
输出结果是:ABCDDCF******
下面贴代码:
#include <stdio.h>
void fun( char *a, char *p )
{
char *t=a;//定义一个新的指针,P只不过是用来记录最后一个字母的位置
for(;t<=p;t++)
if(*t!='*') //先不要管太多只通过t把字符赋给a ,覆盖原来的值
*(a++)=*t;
for(;*t!='\0';t++)
*(a++)=*t;//到了p以后就不用判断直接赋值就好
*a='\0';//加一个结束符防止最后字符串过长
}
//t永远是在a前面的,所以不用担心赋值对源字符串的影响
main()
{ char s[81],*t;
void NONO ( );
printf("Enter a string:\n");gets(s);
t=s;
while(*t)t++;
t--;
while(*t=='*')t--;
fun( s , t );
printf("The string after deleted:\n");puts(s);
NONO();
}
void NONO()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *in, *out ;
int i ; char s[81],*t ;
in = fopen("in.dat","r") ;
out = fopen("out.dat","w") ;
for(i = 0 ; i < 10 ; i++) {
fscanf(in, "%s", s) ;
t=s;
while(*t)t++;
t--;
while(*t=='*')t--;
fun(s,t) ;
fprintf(out, "%s\n", s) ;
}
fclose(in) ;
fclose(out) ;
}