Implement strStr().
Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
题意是在一个字符串中查找目标字符串的第一个位置,如果没有返回-1。
这道题虽然题意很简单,但是细节较多,需要考虑目标字符串为空的情况还有当在某个位置匹配字符串失败后,重新比较开始的位置。
class Solution
{
public:
<span style="white-space:pre"> </span>int strStr(char *haystack, char *needle)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>if (*needle == '\0')//如果目标字符串为空则返回0
<span style="white-space:pre"> </span>return 0;
<span style="white-space:pre"> </span>char *ChpSta = haystack, *ChpNee = needle;
<span style="white-space:pre"> </span>int nPos = -1,nMove = 0;//定义两个标记分别为比较开始的位置和当前比较的位置
<span style="white-space:pre"> </span>while (*ChpSta != '\0')//遍历查找字符串
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>if (*ChpNee == *ChpSta)//比较字符串
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>*ChpNee++;
<span style="white-space:pre"> </span>if (nPos == -1)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>nPos = nMove;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>else
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>if (nPos != -1)//匹配失败时将当前比较的位置重新定义到前一次比较开始的位置的下一位
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>ChpSta = ChpSta - (nMove - nPos);
<span style="white-space:pre"> </span>nMove = nPos;
<span style="white-space:pre"> </span>nPos = -1;
<span style="white-space:pre"> </span>ChpNee = needle;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>nMove++;
<span style="white-space:pre"> </span>ChpSta++;
<span style="white-space:pre"> </span>if (*ChpNee == '\0')//如果匹配完则返回比较开始位置
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>return nPos;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>return -1;//没有找到则返回-1
<span style="white-space:pre"> </span>}
};