
c语言:从字符串s中删除字符c
#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();
} 展开
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语言
可以正确运行,不过你要注意,输入只能输入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)来读取字符串是最好的。
#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();
}