随工作越长,基础编程能力明显下降了很多,连 strstr 函数的实现都花费了 很长时间;
注: 关键还是要 先想清楚 思路模型, 然后再编写代码, 注意思考,不要一上来就写。
一、常规一般要有 两层循环:
(1)第一层遍历 src str, 不匹配则直接 src 的 next, 直到 找到 *(dst + 0) 的匹配点;
(2)记录该匹配点 tmp, 方便 第二层遍历 匹配成功的 时候 就把 该 指针返回;
(3)第二层遍历 src str 的 匹配点 tmp 开始, 单个字符,逐个比较 *src 与 *dst,
注: 关键还是要 先想清楚 思路模型, 然后再编写代码, 注意思考,不要一上来就写。
一、常规一般要有 两层循环:
(1)第一层遍历 src str, 不匹配则直接 src 的 next, 直到 找到 *(dst + 0) 的匹配点;
(2)记录该匹配点 tmp, 方便 第二层遍历 匹配成功的 时候 就把 该 指针返回;
(3)第二层遍历 src str 的 匹配点 tmp 开始, 单个字符,逐个比较 *src 与 *dst,
若还没有到 dst str结束(即 ‘\0’ == *str) 就出现了 *src != *dst, 则break 第二层循环,
并重新 置 下一次 二层 循环的 初始值;
若二层 匹配 循环 完了, 则判断是不是 *dst 遍历 完了(if '\0' == *dst), 是就返回 匹配点tmp , match success。
char *stupid_stsrstr(const char *srcstr, const char *dststr)
{
char *src = srcstr, *dst = dststr, *tmp = NULL;
while('\0' != src)
{
if (*src != *dst) // 在src上找匹配点
{
src ++;
continue;
}
tmp = src; //找到匹配点,并记录,以备返回该点
while('\0' != *dst) //从src的匹配点,dst的第一个,逐字符比较
{
if (*src != *dst) //中间有不匹配则 在src上找第二个匹配点
break;
src++;
dst++;
}
if ('\0' == *dst) //判断是不是把 dst 遍历完了,
return tmp; //是则match suc, 返回。
dst = dststr; //还原到 dst 的第一个 字符,准备下一次第二层遍历
}
return NULL;
}