leetcode实现strstr C ++返回指针

时间:2014-05-10 23:51:20

标签: c++

实施strStr()。

返回指向haystack中第一次出现needle的指针,如果needle不是haystack的一部分,则返回null。

我写道:

class Solution {
public:
    char *strStr(char *haystack, char *needle) {
    std::string s1(haystack);
    std::string s2(needle);

    if(s2.empty())
      {return haystack;}

    int a = s1.length();
    int b = s2.length();

    if(a < b)
      {return NULL;}

    for(int i = 0; i < a - b; i++)
      {
          int j = 0;
          int k = i;
          while(j < b && s2[j] == s1[k])
            {
                k++;
                j++;
            }
          if(j == b)
            {return (char*) s1[i];}
      }
      else return NULL;

    }
};

但是Leetcode给了我编译错误:警告:从不同大小的整数转换为指针[-Wint-to-pointer-cast]

....我应该退还其他一些东西吗?.....

2 个答案:

答案 0 :(得分:3)

return (char*) s1[i];

这有两个问题。首先,您将字符转换为指针。您想要返回字符的地址,而不是将其值转换为指针。其次,s1是从std::string参数初始化的本地haystack。您不希望返回指向其中一个字符的指针,因为一旦函数返回它将超出范围。你想要一个指向原始haystack c字符串中的字符的指针。

return &haystack[i];

答案 1 :(得分:0)

如果您将string想象为一系列字符,那么(char*) s1[i]实际上是在代码段中投射char -> char *

if(j == b)
    {return (char*) s1[i];}

operator[]返回字符串的第i个字符。 (http://www.cplusplus.com/reference/string/string/http://www.cplusplus.com/reference/string/string/operator[]/