今天跟着K&R继续学习C语言,其中有这么一段代码让我感觉很妙:
1 |
|
这是一段删除字符串中指定字符的代码。如果您觉得这段代码没什么,那么这篇博客下面的内容就不需要看了。如果您对它感兴趣,请继续看我分析。
相信您也看得出来,这段代码是个函数,其有两个形参,分别是字符数组类型的fire和字符类型的c,因为我们要删除字符串中的指定字符嘛,所以这两个参数必不可少。
下面是主要思路: 让字符串从开始到结尾过一遍,如果当前字符不是指定的那个字符,那么就对它重新赋值;如果当前字符是指定的那个字符,那么就跳过它。
那么接下来我们来讲一下上面的代码,f++是先使用f的值,再自增1,所以当fire[g] != c时,执行的语句就相当于对fire[g]重新赋值。但是当fire[g] == c时,除了判断和g自增后没有执行的语句。当fire[g]再次不等于c时,fire[f++] = fire[g]就会执行。因为中间fire[g] == c的时候没有赋值,所以这次fire[f++] = fire[g]就相当于跳过了字符c: 此时的f != g,此时的f就是原来字符c的位置,此时的g就是c字符之后的位置。
此程序设计之精巧真是让人赞叹,虽然每一次for的赋值感觉有点浪费,但是在这个思路下似乎只能如此。如果您有更好的想法欢迎使用GitTalk留言。
那么本篇完。