查询替换
在s串中,寻找t串,将之替换为g串.并记录有几次替换.
例、输入:s串 regret —— t串 re —— g串 log
在s串中查询t串re,发现两处,即两次替换后,输出替换后的s串为 logglogt
实现思路
先分别定义s、t、g对应的字符数组,给上相应大小,并指向数组,分别输入s、t、g串
调用函数 replace_str ,将s、t、g作实参传入,执行查询替换
先定义一个count,作用是记录替换次数,也可作查询到几处t串
再定义的str数组及指针,储存替换后 新的字符串。
而定义的p,记录str存储进度
接下来开始循环遍历,循环次数为s串的长度,因为要将s串中的每个字符遍历一次
新定义的k,为t串的比较进度,当循环到s串的下一个字符,t串比较进度需重新刷新为0,所以在循环内部定义,且内循环每次结束k++,表示比较t串的下一个字符。
而内循环的j,会根据当前外循环的i改变而随之改变,代表s串的比较进度
内循环每次判断s串与t串中字符相等,记录相等的次数m,如次数达到t串的长度,即表示在s串中查询到一处与t串相等的地方。
例:s 串 asacadd t串ac
只有当连续两次都相等时,即aa,cc时,才会被记录。避免as与ac判断时,有一次相等,a==a,不满足条件。
所以进行循环后进行判断m次数,是否与t串长度相等,是,则进行循环赋值,将替换的g串赋值到str中,并且记录存储进度。而且进行了一次替换,所以count计数加一。
且下次循环将跳过t串长度-1的i,所以将i加上(strlen(t)-1),为什么?
解释:如下次循环还按着顺序执行i++,那么在s串中寻找的t串,只会被替换一个。不符合程序设定,只能成功替换当t串长度为一的。所以每当t串被查询到一次,i循环将跳过 (strlen(t)-1) 。
例:regret 当第一次循环到re,将之替换为log后,第二次循环就应该从i指向regret中的g开始,而不是i++指向的e,因为e已经被替换掉了,不可再进行赋值到str中。
如判断为,否,则将s串中原本不动的赋值到str中,且用p记录存储进度。
整个循环结束,表示已经全部查询替换存储完成,在str最后赋值上’\0’,表示str串的结束。存储完成。
输出打印count与str串。
1 |
|







