实施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]
....我应该退还其他一些东西吗?.....
答案 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[]/)