标签:
没什么说的,常规思路:
函数原型:const char* StrStr(const char *str1, const char *str2)
方法一:
str1:源字符串;
str2:需要查找的目的字符串;
#pragma once #include<assert.h> const char* My_strstr(const char* str1, const char* str2) { assert(nullptr != str1 && nullptr != str2); //断言 //如果目的字符串不是只有\0,走起 if ('\0' != *str2) { while ('\0' != *str1) { for (int i = 0; *(str1 + i) == *(str2 + i); ++i) { if ('\0' == *(str2 + i + 1)) //这里没用后置加加,而是*(str2+i+1)中只是加了一个1 //目的是想知道str2 + i的下一个字符是不是\0 { return str1; } } ++str1; } return nullptr; } //目的字符串是空的 else { return str1; } } void Test() { char a[] = "abcdefgh"; char b[] = "cde"; const char* result = My_strstr(a,b); }方法二:
源字符串:str1
目的字符串:str2
const char* My_strstr(const char* str1, const char* str2) { assert(nullptr != str1 && nullptr != str2); //断言 for (int i = 0; str1[i] != '\0'; ++i) { int temp = i; //记录源字符串的每次的其实位置,有后边改变; int j = 0; while (str1[i++] == str2[j++]) { if (str2[j] == '\0') //这里的j很巧,由于while()中的条件结束, //j就j++了,所以j是指向下一个的 { return &str1[temp]; } } i = temp; //while 出来,不相等,str1回到相同的几个之前 } return nullptr; }赐教!
标签:
原文地址:http://blog.csdn.net/li_ning_/article/details/51347507