题目
Implement strStr().
Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
题意:实现函数strStr()的功能,strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回-1。
思路
此题比较简单,遍历一次haystack即可,当在str1中下标为i的字符相同的时候,即继续进行下一个字符的比较,但不相同的时候继续从str1下标为i+1的位置重新开始从头开始比较。
实现代码如下:
int strStr(char* haystack, char* needle) {
if(haystack==NULL||needle==NULL){
return -1;
}
int len1=strlen(haystack);
int len2=strlen(needle);
if(len1==0&&len2==0){//都是空字符串,返回下标0
return 0;
}
if(len2>len1){
return -1;
}
int index=0;
int i;
for(i=0;i<len1;i++){
if(index==len2){//,匹配完成,即找到
break;
}
if(haystack[i]==needle[index]){
index++;
}
else{
i-=index;//将i返回这一轮比较前的位置
index=0;
}
}
if(i>=len1&&index<len2){//此种情况说明没有找到
return -1;
}
return i-len2;
}
遇到的问题
在此题中出现的一些问题有:
1、之前考虑的是将两个字符串都空串时,返回-1,报错。
解决方法:加上如下代码即可
if(len1==0&&len2==0){//都是空字符串,返回下标0
return 0;
}
2、在最后一行代码返回前加上了如下判断,而报错
if(i>=len1){//此种情况说明没有找到
return -1;
}
解决方法如下:
if(i>=len1&&index<len2){//此种情况说明没有找到
return -1;
}
最后AC结果如下: