原题就是这么表述的,我的理解就是找到子串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;
}
以上是我测试的完整代码。如果还有更好的办法,欢迎留言!