1、字符串中包含子串
描述:给定一个字符串 A,要求在 A 中查找一个子串 B
方法一:利用 string 的一些函数,比如 find(),substr() 等。
int findstr(string str, string substr)
{
assert(!str.empty() && !substr.empty()); // 断言,必不可少
int length_str = str.size();
int length_substr = substr.size();
if (length_str < length_substr)
return NULL;
else
{
int index = str.find(substr);
return index; // 返回子串在原串中的下标
}
}
int main()
{
string str = "ababcabcacbab";
string sub = "abcac";
//int index = str.find(s);
//cout << str[index];
int index = findstr(str,sub);
cout << index;
return 0;
}
方法二:BF(Brute Force )算法一种暴力算法,串匹配算法。
与第一种算法的不同之处在于:(1)使用 char*(2)没有使用库函数,直接暴力匹配
代码:
int strFind(char* string, char* substring)
{
assert(string != NULL && substring != NULL);
int m = strlen(string);
int n = strlen(substring);
int j = 0;
if (m < n)
return NULL;
for (int i = 0; i < m - n; i++)
{
for ( j = 0; j < n; j++)
{
if (string[i + j] != substring[j]) // 一一比对,如果有一个不相同,就跳出内层循环,重新比对
break;
}
if (j == n)
return i; // 返回原串中第一次出现子串的下标
}
return NULL;
}
int main()
{
char* str = "ababcabcacbab";
char* sub = "abcac";
//int index = str.find(s);
//cout << str[index];
//int index = findstr(str,sub);
//cout << index;
int index = strFind(str,sub);
cout << index;
return 0;
}
方法三、KMP算法
明天再写。今天有点疲惫了。