C语言中删除字符

来源:百度知道 编辑:UC知道 时间:2024/06/01 23:52:17
我的代码
#include "Stdio.h"
#include "Conio.h"
#include "String.h"
del (char *p){
char *q;
q=p;
for(;*q!='\0';p++,q++)
if(*p=='a')
{for(;*(p+1)!='\0';p++)
*p=*(p+1);
*p='\0';
}
return *q;
}
int main(void)
{
char st[20];
int i;
printf("input string :\n");
gets(st);
del(st);
printf("new string is :");
for(i=0;i<strlen(st);i++)
printf("%c",st[i]);
getch();
return 0;
}
WINTC下运行
编译通过 但是我输入wankang 只删除了第一个‘a’,其他也是如此~怎么回事?帮帮忙..谢谢!
我没说明白
我的意思是删除指定字符
比如我例子里面要删除字符串的所有字符‘a’。

if(*p=='a')
{for(;*(p+1)!='\0';p++)
*p=*(p+1);
*p='\0';
}
这段有错误的样子,因为在这段操作中你使得p指针指向了空,而并没在返回上层函数的时候让它回复到原来是‘a’的位置,可改为
if(*p=='a')
{ char *w=p;
for(;*(p+1)!='\0';p++)
*p=*(p+1);
*p='\0';
p=w;
}
即每次用了w来记录原来‘a’的位置,以后进行指针操作时都记得注意
指针的移动问题哦

/* 这段代码可以全部实现删除字符串 */
char del (char *p)
{
char *q;
q=p;

for(;*p!='\0';p++,q++){
/*if(*p=='a'){ */ /*为什么要这么个判断???*/
/*for(;*(p+1)!='\0';p++) */
p=(p+1);
*q='\0';
}

return *q;
}

void main(void)
{
char st[20];
int i;

printf("input string :\n");
gets(st);

del(st);

printf("new string is :");
for(i=0;i<strlen(st);i++)
printf("%c",st[i]);

get