1./给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。
//示例 1:
//输入:haystack = "sadbutsad", needle = "sad"
//输出:0
//解释:"sad" 在下标 0 和 6 处匹配。
//第一个匹配项的下标是 0 ,所以返回 0 。
//示例 2:
//输入:haystack = "leetcode", needle = "leeto"
//输出: - 1
//解释:"leeto" 没有在 "leetcode" 中出现,所以返回 - 1
2.方法一:第一步我们先设置数组haystack,needle的值,然后将haystack,与needle的长度(int n = strlen(haystack), m = strlen(needle)),然后进行判断如果haystack[i]==needle[0],如果相等flage=1,然后haystack[i+v]!=needle[v](v<m),flage=0;,反之i++.
//方法一
int strStr(char* haystack, char* needle)
{
int n = strlen(haystack), m = strlen(needle);
int j = 0;
int flage= 0;
for (int i = 0; i < n; i++)
{
if (haystack[i] == needle[j])
{
flage = 1;
for (int v = 0; v < m; v++)
{
if (haystack[i + v] != needle[v])
{
flage = 0;
break;
}
}
}
if (flage)
{
return i;
}
}
return -1;
}
int main()
{
char haystack[20] = { "sadbutsad" };
char needle[10] = { "sad" };
int n= strStr(haystack, needle);
printf("%d ", n);
}
3.方法二:设置i=0,j=0;,判断haystack[i]==needle[j],如果相等,则i++,j++,如果不相等,i=i-j+1,j=0.对i++,对needle进行重新判断。对判断needle[j]=='\0'.如果相等,则返回i-j,如果不相等,则返回-1.
//方法二
int strStr(char* haystack, char* needle) {
int i = 0, j = 0;
while (haystack[i] != '\0' && needle[j] != '\0') {
if (haystack[i] == needle[j]) {
i++;
j++;
}
else {
i = i - j + 1;
j = 0;
}
}
if (needle[j] == '\0') return i - j;
return -1;
}
int main()
{
char haystack[20] = { "sadbutsad" };
char needle[10] = { "sad" };
int n= strStr(haystack, needle);
printf("%d ", n);
}
标签:flage,匹配,int,needle,char,++,字符串,下标,haystack
From: https://blog.csdn.net/scy2429828663/article/details/142684376