第二篇 C语言——删除指定字符(外部函数)


关于第七章外部函数的习题案例

    这个题很有意思,有兴趣的朋友可以自己看一看,最好可以自己用代码实现一下,很精妙的一个小程序。


提示:以下是本篇文章正文内容,下面案例可供参考

一、案例题目

    有一个字符串,内有若干个字符,现输入一个字符,要求程序将字符串中该字符删去。用外部函数实现。
    其实问题很简单,就是一个简单的删除,这个程序不在于功能多复杂,而是设计的很精妙哈哈。话不多说咱们来看实现方法

二、实现方法

1.main.c

// 例子7.20(删除指定字符)(外部函数)
int main() {
    extern void enter_string(char str[]);	//声明外部输入函数
    extern void delete_string(char str[],char ch);	//声明外部删除函数
    extern void print_string(char str[]);	//声明外部输出函数
    char c,str[80];
    enter_string(str);
    scanf("%c",&c);
    delete_string(str,c);
    print_string(str);
    return 0;
}

2.outer.c

    为了简洁,我把三个函数代码都放在这一个源程序文件中。我们主要是看中间的delete_string函数,设计很巧妙。

//外部输入函数
void enter_string(char str[]) {
    gets(str);	//输入一个字符串
}
//外部删除函数
void delete_string(char str[], char ch) {
    int j;
    for (int i = j = 0; str[i] != '\0'; ++i) {
        if (str[i] != ch) str[j++] = str[i];
    }
    str[j] = '\0';
}
//外部输出函数
void print_string(char str[])
{
    printf("%s\n",str);		//输出字符串
}

    分析:函数定义了两个变量,i和j,作用是什么未知,我们来进行分析。首先来看for循环,初始化,循环条件,趋于结束的操作,都是齐全的。
    我们看循环条件,很简单,就是一直循环到字符串结束为止。我们模拟输入”This is C Program“,和’ '(空格字符)。

  1. 第一次循环:首先i和j都是0,str[0]!=’\0’ (str[0]=‘T’)符合循环的条件,进入循环中,判断当前字符是不是 ’ 空格
    ’ 字符。很显然不是,执行if结构体内的操作,把str[i]赋值给str[j],再让j自加1,进行下一次循环。
  2. 第二次循环:i也自增1,这时i和j还是一样。i=1,j=1。第二次循环类似于第一次,我们不做过多描述,直接看不同的。到这里都看不明白的盆友,一步一步用纸写下来看一哈哦。

  1. 第五次循环:i和j都为4,这时不一样的来了,if条件不正确,不执行方法体。则j和i的值就出现了一个差值。
  2. 第六次循环:i的值为5,j的值为4,if条件满足,这时就会把str[i]的值覆盖给str[j]上,也就是下一位把上一位的值替换。这时i和j再正常进行自增。

  1. 第八次循环:i的值为7,j的值为6,同理进行操作,跳过循环。

  1. 第十六次循环:这时字符串已经被修改为”ThisisCProgram“,但还是有个问题,字符串结束的标志’\0’呢。我们在循环结束的时候把它加上。

    有些盆友可能想问,为什么在str[j]的地方加上\0呢,我们仔细想一想,我们是要在字符串结尾的地方加上这个结束标识符,那么我们就需要知道这个字符串的有效长度。如何知道呢有效长度?j 的值恰好就是有效长度,每次循环字符与我们输入的字符不同的时候,j的值都会加一,这样就可以把有效长度的值统计出来,而且他是从1开始的,刚好可以放在字符串的最后面!
    这样一个看似毫无关联的变量,其实串接起来很多我们需要做的任务,很巧妙哈。

总结

    其实程序很简单,不过我们也要从简单的问题找到一些有价值的方法和知识。以上就是对外部函数删除指定字符串的理解,欢迎大家讨论。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值