特别说明:由于vs2008中assert后面不能定义变量,所以将变量定义在了assert前面!!!
一:编程思想
1:利用数组传参发生降维的特点将字符串首元素地址传到自定义函数中。
2:在判断过程中若有部分字符相同则须将判断字符中的指针dst回指到数组arr2的首元素的地址处。
3:但是对指向数组arr1的指针ret而言,若不与det所指的元素相同.则直接将指针arrr1所指的对象赋给ret使其重新开始判断。若在dst指向’ \0 '前指针dst与ret所指的对象都相同,则从*arr1所指的对象开始打印arr1[]中剩余的元素。
二:要求
在字符串中找到指定的字符串,若找到则从第一个相同元素开始输出剩余的字符。
若找不到则返回NULL.
例如:从arr1[]="123abc1234edf"中查找arr2[]=“1234”。
三:代码
#include<stdio.h>
#include<string.h>
#include<assert.h>
char *my_strstr(const char* arr1,const char* arr2)
{
const char* ret= arr1;
const char* dst= arr2;
assert(arr1); //检测指针arr1是否合法
assert(arr2); //检测指针arr2是否合法
while(*ret)
{
ret=arr1;
dst=arr2;
while(*ret && *dst && *ret == * dst )
{
dst++;
ret++;
}
if(*dst =='\0')
{
return (arr1);
}
arr1++; //若不满足while循环中的条件
}
return NULL;
}
int main()
{
const char arr1[]="123abc1234edf";
const char arr2[]="1234";
const char *ret=my_strstr(arr1,arr2);
printf("%s\n",ret);
return 0;
}