字符串的匹配先定义两个名词:模式串和文本串。我们的任务就是在文本串中找到模式串第一次出现的位置,如果找到就返回位置的下标,如果没有找到返回-1.其实这就是C++语言里面的一个函数:
extern char *strstr(char *str1, const char *str2);
对于这个函数的解释:
str1: 被查找目标 str2: 要查找对象 返回值:如果str2是str1的子串,则返回str2在str1的首次出现的地址; 如果str2不是str1的子串,则返回NULL。 例如: char str[]="1234xyz"; char *str1=strstr(str,"34"); cout << str1 << endl; 显示的是: 34xyz
返回值是一个指针,这个指针指向文本串中第一次出现模式串的位置。
字符串查找的暴力算法
先看LeetCode上的一道题目,实现这个函数 int strStr(string haystack, string needle); ,要求返回文本串中出现模式串的下标值。
1.如果模式串为NULL,那么直接返回0. 2.如果模式串的长度大于文本串,那么一定查找不到,返回-1. 3.如果存在的话,查找的范围可以限定在文本串的0~s.size()-p.size();
所以暴力算法的代码实现:
int strStr(string haystack, string needle) { int i = 0; //模式串为空 if(needle.empty()) { return 0; } //文本串的大小小于模式串 if(haystack.size() < needle.size()) { return -1; } //确定查找的范围 for(i = 0; i <= haystack.size()-needle.size(); ++i) { int j = 0; for(j = 0; j < needle.size(); ++j) { if(haystack[i+j] != needle[j]) { break; } }//for if(j == needle.size()) { return i; } }//for if(i == haystack.size()-needle.size() + 1) { return -1; } }
时间: 2024-10-12 10:33:20