c语言:从字符串s中删除字符c

#include<stdio.h>#include<conio.h>voidsqueeze(chars[],charc){inti=0,j=0;for(i;i<14;i+... #include<stdio.h>
#include<conio.h>
void squeeze(char s[],char c)
{
int i=0,j=0;
for(i;i<14;i++)
if(s[i]!=c)
s[j++]=s[i];
s[j]='\0';
printf("%s",s);
}
int main(void)
{
int i;
char s[14],c;
printf("请输入一串字符串\n");
for(i=0;i<14;i++)
scanf("%c",&s[i]);
printf("请输入要删去的字符\n");
scanf("%c",&c);
squeeze(s,c);
getch();
}
展开
 我来答
爱教育爱学习
高粉答主

2019-10-18 · 学而不思则罔,思而不学则殆
爱教育爱学习
采纳数:384 获赞数:112757

向TA提问 私信TA
展开全部

c语言从字符串s中删除字符c:

#include<stdio.h>

/*从字符串S中删除字符c*/

voidsqueeze(char[],char);

intmain()

{

chars[]="hdsjalfh";

charc;//保存需要删除的字符

printf("请输入需要删除的字符:");

c=getchar();

squeeze(s,c);

printf("%s\n",s);

return0;

}

voidsqueeze(chars[],charc)

{

inti=0,j=0;

while(s[i]!='\0'){

if(s[i]!=c){

s[j++]=s[i];

}

i++;

}

s[j]='\0';

}

扩展资料

设置两个指向字符的指针变量t和f。先使用循环语句让t指针指向字符串中最后一个字符,而f指针指向字符串中第一个字符。

再判断t和f指向的字符是否为“*”,如果为“*”,则t指针自减,f指针自增,直到遇到第一个不是的字符为止。再定义一个函数fun()用于删除字符串中的“*”号,同时保留字符串前后的“*”号。

#include<stdio.h>

intfun(char*a,char*h,char*p)

{

inti,j;

/*删除指针h与p之间的所有“*”*/

for(i=0,j=0;&h[i]<p;i++)

if(h[i]!='*')

h[j++]=h[i];

/*将指针p至字符串尾部的所有字符前移*/

for(i=0;p[i];i++,j++)

h[j]=p[i];

h[j]='\0';/*在字符串尾部添加结束标志*/

return0;

}

intmain()

{

chars[81],*t,*f;

printf("Enterastring:\n");

gets(s);/*输入字符串*/

t=f=s;/*用字符指针t、f指向串s*/

while(*t)

t++;

t--;/*将指针t定位到字符串中最后一个字符*/

while(*t=='*')/*指针t指向字符串中最后一个字符*/

t--;

while(*f=='*')/*指针f指向字符串中第一个字符*/

f++;

fun(s,f,t);

printf("Thestringafterdeleted:\n");/*输出结果*/

puts(s);

return0;

}

参考资料来源:百度百科—c语言

百度网友6fe74e2
推荐于2017-12-16 · TA获得超过6594个赞
知道大有可为答主
回答量:1973
采纳率:100%
帮助的人:323万
展开全部

可以正确运行,不过你要注意,输入只能输入13个字符,不然就错的,而且只能删一个字符,

因为你写的有点小问题:

修改一下:

#include <conio.h>

#include<stdio.h>
#include<string.h>

void squeeze(char s[],char c)
{
     int i=0,j=0;
     for(i;i<strlen(s);i++)
          if(s[i]!=c)
              s[j++]=s[i];
          s[j]='\0';
          printf("%s",s);
}       
int main(void)
{
      int i;
      char s[14]={0},c;
      printf("请输入一串字符串\n");
      //for(i=0;i<14;i++)
        //   scanf("%c",&s[i]);

      gets(s);
      printf("请输入要删去的字符\n");
      scanf("%c",&c);
      squeeze(s,c);
      getch();
}

这样的话更有通用性:

追问
运行了一下你的代码,真的能运行,但是我不明白的是为什么我的代码就不行呢,不是说scanf和gets语句在遇到空格的时候才有差异吗?我不输人空格怎么还是有错误呢?而且你的代码我可以不止输入14个字符,这是怎么回事啊,我不太懂,请教一下
追答
你的for循环强制要写14个字符进去,但是回车也被当成了字符了,

所以,不要用循环写字符的方法,直接用scanf("%s",s)或者gets(s)来读取字符串是最好的。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
听不清啊
高粉答主

2013-05-02 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:2亿
展开全部
#include<stdio.h>
#include<conio.h>
void squeeze(char s[],char c)
{
int i=0,j=0;
for(;s[i]!='\0';i++)
if(s[i]!=c)
s[j++]=s[i];
s[j]='\0';
puts(s);
}
int main(void)
{
int i;
char s[80],c;
printf("请输入一串字符串\n");
gets(s); ''
printf("请输入要删去的字符\n");
scanf("%c",&c);
squeeze(s,c);
getch();
}
追问
我按照你的改了真的对了, 你能告诉我为什么你那么做就行,我的代码就不行吗?
追答
#include
#include
void squeeze(char s[],char c)
{
int i=0,j=0;
for(;s[i]!='\0';i++) //gets()读到的字符串是以‘\0'结尾的
if(s[i]!=c) //不是指定的字符就复制
s[j++]=s[i];
s[j]='\0'; //循环结束也就是复制结束了,加上字符串结束的标记
puts(s);
}
int main(void)
{
int i;
char s[80],c; //最多可以输入79个字符,你的程序是强制输入14个字符,可能太多或不够
printf("请输入一串字符串\n");
gets(s); //允许输入的字符串中包含空格
printf("请输入要删去的字符\n");
scanf("%c",&c);
squeeze(s,c);
getch();
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
FanyongYin
2013-05-02 · TA获得超过1054个赞
知道小有建树答主
回答量:1298
采纳率:100%
帮助的人:1037万
展开全部

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gqh00
2018-11-06
知道答主
回答量:5
采纳率:0%
帮助的人:5563
展开全部


已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式