寻找真命天子……
到目前为止,你已经用过了书中很多C函数,事实上还有很多方法可以让它们变得更强大,只要学会正确使用这些方法,就可以用更少的代码做更多的事。
怎么做?我们来看一个例子。假设你想过滤某个字符串数组中的数据,只显示其中部分字符串:
int NUM_ADS = 7;
char *ADS[] = {
"William: SBM GSOH likes sports, TV, dining",
"Matt: SWM NS likes art, movies, theater",
"Luis: SLM ND likes books, theater, art",
"Mike: DWM DS likes trucks, sports and bieber",
"Peter: SAM likes chess, working out and art",
"Josh: SJM likes sports, movies and theater",
"Jed: DBM likes theater, books and dining"
};
下面来写代码,用字符串函数过滤数组。
代码冰箱贴
请完成find()
函数,用它过滤出列表中所有运动迷,同时他们不能是Bieber的粉丝。
注意:有的代码片段可能不会用到。
代码冰箱贴解答
请完成find()
函数,用它过滤出列表中所有运动迷,同时他们不能是Bieber的粉丝。
试驾
假如把函数和数据都放在一个叫find.c
的文件中,就可以像这样编译并运行程序:
和预期一样,find()
函数循环遍历了数组,然后找到了匹配的字符串。既然有了基本代码,就不难复制出搜索其他内容的函数。
没错,复制函数会产生很多重复代码。
C程序经常会执行一些大同小异的任务,现在find()
函数为了搜索匹配字符串,会遍历数组中所有元素,并测试每个字符串,而这些测试会写死在代码中,也就是说函数永远只能做一种测试。
当然也可以把字符串作为参数传递给函数,让函数搜索不同的子串,但这样find()
还是无法检查3个字符串,比如“arts”、“theater”和“dining”。你需要的是一种截然不同的技术。
你需要更高端的东西……