返回信息流用c++写的,判断taget是不是source的子串
class Solution {
public:
/**
* Returns a index to the first occurrence of target in source,
* or -1 if target is not part of source.
* @param source string to be scanned.
* @param target string containing the sequence of characters to match.
*/
int strStr(const char *source, const char *target) {
// write your code here
if((source=="")&&(target==""))
return 0;
char first=target[0];
int i=0;
int j=0;
int pos=0;
string s=source;
string t=target;
for(i=0;i<s.size();i++)
{
if(source[i]!=first)
continue;
else
{
pos=i;
for(j=0;j<t.size();j++)
{
if(source[i]==target[j])
{
if(j==t.size()-1)
return pos;
i++;
}
else
{
break;
}
}
}
}
return -1;
}
};
我用g++编译后,在输入["",""]情况下是正确的0,但是lintcode的运行结果是:
求大神指点
这是一条镜像帖。来源:北邮人论坛 / cpp / #90348同步于 2016/2/23
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
lintcode上字符串子串问题
meng714620
2016/2/23镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
""字符串不是个指针常量吗?我本地运行是没问题的
你说咋整呢
【 在 spicewolf 的大作中提到: 】
: 指针和“”比较,是不是不太好呢?少年
这个可能跟编译器有关系吧,@nuanyangyang
""字符串是个指针常量,但是参数传进去的""和函数里面的""可能不是放在一个地方,这样就会地址不相同。
要判断是不是空字符串,可以先判断是否为NULL,然后,if (*source == '\0' && *targe == '\0')
【 在 meng714620 的大作中提到: 】
: ""字符串不是个指针常量吗?我本地运行是没问题的
: 你说咋整呢
【 在 xiaobing307 的大作中提到: 】
: 这个可能跟编译器有关系吧,@nuanyangyang
: ""字符串是个指针常量,但是参数传进去的""和函数里面的""可能不是放在一个地方,这样就会地址不相同。
: 要判断是不是空字符串,可以先判断是否为NULL,然后,if (*source == "\0" && *targe == '\0')
嗯。并不是所有的空字符串的地址都相同。
确切地说,""对于编译器来说,只是翻译成一个指向一个存有'\0'的存储空间的指针而已。编译器不保证所有的""都指向同一个地方。
而且,字符串不能用==来判断相等。判断空,用source[0]=='\0';判断字符串相等请用strcmp(source, dest)==0.
关于NULL,NULL的意思是无效指针,而""是有效的,它指向一个空字符串。所以""不会等于NULL。
实现函数的时候,看要求,说参数能不能是NULL,如果能就判断,不能就不用判断。如果不是别人规定,而是自己设计,那么就自己先想好参数到底应该不应该(取决于需要不需要)是NULL。如果决定函数不接受NULL参数,就不用判断是不是NULL了。
有道理,谢谢
【 在 xiaobing307 的大作中提到: 】
: 这个可能跟编译器有关系吧,@nuanyangyang
: ""字符串是个指针常量,但是参数传进去的""和函数里面的""可能不是放在一个地方,这样就会地址不相同。
: 要判断是不是空字符串,可以先判断是否为NULL,然后,if (*source == '\0' && *targe == '\0')