从键盘输入一个字符串给str和一个字符给c,删除str中的所有字符c并输出删除后的字符串str。
输入
第一行是一个字符串;
第二行是一个字符。
输出
删除指定字符后的字符串。
样例输入
sdf$$$sdf$$
$
样例输出
sdfsdf
我的答案是:
#include <stdio.h>
#include <string.h>
int main()
{
char str[100],c;
int i=0,j=0;
gets(str);
scanf("%c",&c);
for(i=0;str[i]!='\0';i++)
{
if(str[i]!=c)
{
str[j]=str[i];
j++;
}
}
str[j]='\0';
printf("%s\n",str);
return 0;
}
这个程序运行的时候是对的,我就是想请大家帮忙给我解释一下,为什么不加 str[j]='\0';是错的呢,我已开始就没加。谢谢了
C语言实验题——删除指定字符
答案:5 悬赏:20 手机版
解决时间 2021-12-20 21:56
- 提问者网友:咪咪
- 2021-12-20 14:42
最佳答案
- 五星知识达人网友:撞了怀
- 2021-12-20 16:14
'\0'是结束记号,你不加的话字符串的长度就没有缩短
比如字符串 abc,要删除b,你不加'\0'的话,就会输出acc,
内存布局:acc'\0'
因为最后一个c后边本来有一个'\0',删除后,必须在新的字符串末尾加'\0',即第3个字符c的地方,这样就输出ac了,
布局:ac'\0''\0'
比如字符串 abc,要删除b,你不加'\0'的话,就会输出acc,
内存布局:acc'\0'
因为最后一个c后边本来有一个'\0',删除后,必须在新的字符串末尾加'\0',即第3个字符c的地方,这样就输出ac了,
布局:ac'\0''\0'
全部回答
- 1楼网友:青灯有味
- 2021-12-20 18:24
#include
#include
void main()
{
int j=0,i;
char str[20],c;
printf("请您输入字符串\n");
gets(str);
printf("\n请您输入要删除的一个字符\n");
scanf("%c",&c);
for(i=0;str[i]!='\0';i++)
if(str[i]!=c)
str[j++]=str[i];
str[j]='\0';
printf("%s\n",str);
}
- 2楼网友:第四晚心情
- 2021-12-20 17:36
这个 str[j]='\0';是if中出现str[i]=c的时候(注意这个时候j=i)把str[j](也就是str[i],即c)置换成空字符,以此来实现删除c
- 3楼网友:撞了怀
- 2021-12-20 17:10
'\0'是字符串的结尾字符,如果你不加的话,输出就成了
sdfsdfsdf$$
增加了
str[j]='\0';
这句后,实际上内存中的字符串str的内容是
sdfsdfsdf$$'\0'
- 4楼网友:从此江山别
- 2021-12-20 17:02
从字符串删除指定字符设计方法:
输入字符串和待删除字符
定义一个原字符串下标i和一个新字符串下标j
用i下标循环遍历字符串
如果当前字符与待删除字符不同,则存储到新数组下标位置中,新下标+1
循环结束,在新下标最大值位置,赋值字符串结束符
输出新字符串
参考代码:
#include <stdio.h>
int main()
{
char str[100],ch;
int i,j;
gets(str);
ch=getchar();
for( i=0,j=0;str[i];i++ )
if ( str[i]!=ch )
str[j++]=str[i];
str[j]='\0';
puts(str);
return 0;
}运行结果:
sdf$$$sdf$$
$
sdfsdf
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯