C语言删除字符串中指定字符

编程实现:从键盘输入一个字符串及一个待删除字符,将该字符串中的所有待删除字符删掉(删除时不区分大小写),要求:
(1)在main函数中输入字符串及待删除字符
(2)在自定义函数中实现删除字符的功能
(3)在main函数中输出删除后的结果
#include<stdio.h>

#include<string.h>
void delete(char *s,char c)
{int i,j;
for(i=0;s[i]!='\0';)
{if(strcmp(s[i],c)==0)
for(j=i;s[j]!='\0';j++)
s[j]=s[j+1];
else i++; }
return;}
void main()
{char s[80];
char c;
gets(s);
getchar();
c=getchar();
delete(s,c);
puts(s);}
请问有什么错误吗,为什么每次程序一运行。输入abc回车再输入a再回车(也就是从abc中删除a)程序总是崩溃呢?

第1个回答  2018-07-25
直接使用空字符串替换就可以了
String b = "abcabcabc";
b=b.replace("b","");

这个应该是比较简单的了,别的比如取出来你想要删掉的字符的位置,然后去除
第2个回答  2018-05-21

void delchar(char *str, char del)
{
char *d = str;
while (*str != '\0') {
if (*str != del) {
*d++ = *str;
}
++str;
}
*d = '\0';
}

拓展:

C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

第3个回答  2018-12-01
题主的注释是正确的。
首先,p q都指向s指向的数组。你可以完全把p q当成s一样的东西,只不过*q *p是可以变化的。
p作为循环判断,只要p不空就继续循环。p不为要删除的字符,就将p目前指向的字符赋值到q。
如:
s: 12345
del_x: 3
首先,q[0] = p[0] = 1; q++;其实是s[0] = s[0]
然后q[1] = 2; q++;s[1] = s[1],其实在遇到要删除的字符前赋值并没有意义,只需要q++就行
q[2] = 4,从这里开始,因为已经删除了3,所以q必须开始变化,所以需要使用q[2] = p[3],就是s[2] = s[3]
最后循环结束的q:12455,而*p = '\0',所以把q最后一位赋值成\0。
第4个回答  2014-05-20
你只是把字符c用\0代替了,并不是删除。
以你的代码为基础,可以改成如下:
void delchar(char *s,char c)
{
int i;

i=0;
while(s[i]!='\0')
{
if(s[i]==c)
memcpy(&s[i], &s[i+1], strlen(&s[i+1]) + 1);
else
i++;
}
}
第5个回答  2010-03-18
他那样是对的
当i!=n时会执行里面的语句
当i==n时会跳过里面的语句进行下一次循环!
因为数组最好是连续存放好一点!!
所以中间有字符删除后面的就要移位上来!!
它的问题在于没有b[i]=a[j]应该是b[j]=a[i],可以去试试
不知道这样说楼主明白没?

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网