永发信息网

C语言实验题——删除指定字符

答案:5  悬赏:20  手机版
解决时间 2021-12-20 21:56
  • 提问者网友:咪咪
  • 2021-12-20 14:42
从键盘输入一个字符串给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';是错的呢,我已开始就没加。谢谢了
最佳答案
  • 五星知识达人网友:撞了怀
  • 2021-12-20 16:14
'\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
  • 我要举报
    如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
    点此我要举报以上问答信息
    大家都在看
    推荐资讯