實現 strStr() 函數。css
給定一個 haystack 字符串和一個 needle 字符串,在 haystack 字符串中找出 needle 字符串出現的第一個位置 (從0開始)。若是不存在,則返回 -1。面試
示例 1:函數
輸入: haystack = "hello", needle = "ll"
輸出: 2
示例 2:spa
輸入: haystack = "aaaaa", needle = "bba"
輸出: -1
說明:指針
當 needle 是空字符串時,咱們應當返回什麼值呢?這是一個在面試中很好的問題。code
對於本題而言,當 needle 是空字符串時咱們應當返回 0 。這與C語言的 strstr() 以及 Java的 indexOf() 定義相符。blog
/**字符串
輸入: haystack = "hello", needle = "ll"
1.使用雙指針,指針i指向haystack的開始位置,指針j指向needle的開始位置
2.初始i=0,j=0,t=0。haystack[i]=h,needle[l]=l。以haystack串做爲外循環
3.第一次循環判斷,haystack[i]&&needle[j]有值知足條件,進入第一次循環
作判斷haystack[i]=h等於needle[l]=l不成立,t=t+1=1,i=1,j=0
4.第二次循環判斷,haystack[i]=e,needle[l]=l,haystack[i]&&needle[j]有值知足條件,進入第二次循環
作判斷haystack[i]=e等於needle[l]=l不成立,t=t+1=2,i=2,j=0
5.第三次循環判斷,haystack[i]=l,needle[l]=l,haystack[i]&&needle[j]有值知足條件,進入第三次循環
作判斷haystack[i]=l等於needle[l]=l成立,i=3,j=1,continue接下來的代碼不走,直接進入新的循環判斷
6.第四次循環判斷,haystack[i]=l,needle[l]=l,haystack[i]&&needle[j]有值知足條件,進入第四次循環
作判斷haystack[i]=l等於needle[l]=l成立,i=4,j=2,continue接下來的代碼不走,進入第五次循環
7.第五次循環判斷,haystack[i]=e,needle[l]='\0',haystack[i]&&needle[j]不知足條件,跳出循環
8.判斷needle[j] == '\0'知足條件,返回t=2,結束it
// 28. 實現 strStr().cpp : 定義控制檯應用程序的入口點。 // #include "stdafx.h" #include "stdlib.h" int strStr(char * haystack, char * needle){ int i = 0,j =0,t=i;//必定要有t while (haystack[i]&&needle[j]){ if (haystack[i] == needle[j]){ i++; j++; continue; //C 語言中的 continue 語句有點像 break 語句。但它不是強制終止,continue 會跳過當前循環中的代碼,強迫開始下一次循環。 } else{ t=t+1; i=t; j=0; } } //若是needle串到告終尾的時候,表明順利找到 if (needle[j] == '\0'){ return t; } //不然返回-1,沒找到 return -1; } int _tmain(int argc, _TCHAR* argv[]) { int strStr(char * haystack, char * needle); char *str1 = (char*)malloc(100); char *str2 = (char*)malloc(100); // char *str = NULL; 錯誤的用法 scanf("%s %s",str1,str2); int result=strStr(str1, str2); printf("%d",result); system("pause"); return 0; }