在大字符串中返回一个子字符串的的位置

<span style="font-family:Arial, Helvetica, sans-serif;">如果第二个字符串被包含在第一个字符串中,函数就返回被包含的字符串开始的地址。例如string_in(‘’hats‘’,‘’at‘’)返回hats中a的地址,否则返回空指针</span>
<span style="font-family: Arial, Helvetica, sans-serif;">#include<iostream></span>
using namespace std;
char* search(char *dst,char *src);
void main()
{
	char *string1="yang hai lin is a good person!";
	char *test="i";
	char *a=search(test,string1);
	cout<<a<<endl;

}
 
char* search(char *dst,char *src)
{
	int len_dst=strlen(dst);
	int len_src=strlen(src);
	int i,j;
	char *d=dst,*s=src;
		for (  j=0;j<len_src;j++)
		{
			if (d[0]==s[j])        
			{   int jj=j;
			 
				for (int i=1;i<len_dst;i++ )
				{
					if(d[i]==s[++jj])
						continue;
					else
						break;

				}
				if(i==len_dst)
					return (src+j);
			}
		}
		return NULL;	
}

下面是参考答案,写的比较诡异

#include <stdio.h>

char *string_in(char *p1, char *p2);

int main(void)
{
    char str1[81];
 char str2[21];
 char *p;
 do
 {
  puts("input range string:");
  gets(str1);
  puts("input match string:");
  gets(str2);
  p = string_in(str1, str2);
  if ( p )
  {
   puts("Find!");
   puts(p);
  }
  else puts("Can't find!");

  puts("input any char except q to go on.");
  gets(str1);
 }
 while(*str1 != 'q');

 puts("Quit.");
    return 0;
}

char *string_in(char *p1, char *p2)
{
 char *p1_save = p1, *p2_save = p2;
 if(*p1 == '\0' || *p2 == '\0') return NULL;
 while(1)
 {
  if(*p1 == *p2)
  {
   if(*++p2 == '\0') return p1_save;
   if(*++p1 == '\0') return NULL;
  }
  else
  {
   if(*++p1 == '\0') return NULL;
   p1_save = p1;
   p2 = p2_save;
  }
 }
}

 


你可能感兴趣的:(编程,c)