如何用C/C++找到子串B在子串A中出现的位置(返回整数)?

原题就是这么表述的,我的理解就是找到子串str2在str1中首次出现的位置下标,若找不到则返回-1。本想用strstr() 函数,可是此函数返回值是char,到底怎么找到返回的下标呢?求大佬指点。

最直接的方法,依次输出str1,

int count=-1,j;

for(int i=0;i<str1.length;i++)

{  if(str1[i]=str2[0])

{

for ( j=i;j<str2.length+i;j++)

{if(str1[j]!=str2[j-i])

continue;

}

if(j>str2.length+i) count=i;

}

C++的话,可以用STL的string容器。它有个find成员可以做你说的事,但是返回值不太一样。find在找到时返回数组下标,否则返回一个符号常量std::string::npos。这个符号常量是一个非常大的正整数,大到个人PC上决不可能出现这种下标——因为数组尺寸是有上限的。

#include<stdio.h>
#include<string.h>

int locateStr(char *str1, char *str2){ 
	int count=-1;
	int i, j;
	int len1=strlen(str1);
	int len2=strlen(str2);
	for(i=0;i<len1;i++){  
	    if(str1[i]==str2[0]){
		    	for(j=i;j<len2+i;j++){
		    		if(str1[j]!=str2[j-i]){
		    			break;
					} 
				}
				if(j==len2+i) 
					count=i;
		}
	}
     return count;
}

int main(int argc, char* argv[]){
	char str1[]="fdsfdfhashellohahahaha";
	char str2[]="hello";
	int p=locateStr(str1, str2);
	printf("%d", p);
	return 0;
} 

以上是我测试的完整代码。如果还有更好的办法,欢迎留言!