C语言一个程序中的小小问题

来源:百度知道 编辑:UC知道 时间:2024/04/30 08:45:24
有一字符串,内有若干个字符,今输入一个字符,要求程序将字符串中该字符删去。用外

部函数实现。
filel.c(文件1)

#include<stdio.h>
void main()
{extern void enter_string(char str[]);
extern void delete_string(char str[],char ch);
extern void print_string(char str[]);
char c;
char str[80];
enter_string(str);
scanf("%c",&c);
delete_string(str,c);
print_string(str);
}

file2.c*(文件2)

#include<stdio.h>
void enter_string(char str[80])
{
gets(str);
}

file3.c(文件3)

#include<stdio.h>
void delete_string(char str[],char ch)
{int i,j;
for(i=j=0;str[i]!='\0';i++)
if(str[i]!=ch)
str[j++]=str[i];
str[j]='\0';
}

file4.c(文件4)

#include<stdio.h>
void print_string(char str[])
{
printf("%s\n",str);
}

说一下文件3里的str[j++]=str

比如你输入的是:abcdegh
而你要删除d
那么在循环里判断str[0]是不是等于d,若不是,则把str[0]赋值给str[o];即str[0]保持不变,也即不删除a,然后i,j都自加.
...
str[2]赋值给str[2].
当判断str[3]时,它等于d,所以不执行赋值语句,那么j就没有加1,此时就落后i一个位置了.那么下次循环里赋值的时候就是把str[4]赋值给str[3]了..实现了后面字符的依次前移一位
//这程序也不长嘛

str[j++]=str[i];
可以拆分为:
str[j] = srr[i];
j++;

此句的作用是把新的插入点向后移动一位。