原型:char *strstr(const char *str1, const char *str2);
#include<string.h>
找出str2字符串在str1字符串中第一次出现的位置(不包括str2的串结束符)。返回该位置的指针,如找不到,返回空指针。
Returns a pointer to the first occurrence of strSearch in str, or NULL if strSearch does not appear in str. IfstrSearch points to a string of zero length, the function returns str.
#include <stdio.h>#include <conio.h>#include <string.h>#include <stdlib.h>#pragma warning (disable:4996)char *mystrstr(char *s1,char *s2);int main(void){ char *s="Golden Global View"; char *l="ob"; //char *l="" char *p; system("cls"); p=mystrstr(s,l); if (p!=NULL) { printf("%s\n",p); } else { printf("Not Found!\n"); } getch(); return 0;}/*FROM 百科*/char *mystrstr(char *s1,char *s2){ int n; if (*s2) //两种情况考虑 { while(*s1) { for (n=0;*(s1+n)==*(s2+n);n++) { if (!*(s2+n+1)) //查找的下一个字符是否为'\0' { return (char*)s1; } } s1++; } return NULL; } else { return (char*)s1; }}
另一个实现:
char * strstr (buf, sub) register char *buf; register char *sub;{ register char *bp; register char *sp; if (!*sub) return buf; while (*buf) { bp = buf; sp = sub; do { if (!*sp) return buf; } while (*bp++ == *sp++); buf += 1; } return 0;}
又一个实现:
#include <iostream>#include <string>using namespace std;//c语言实现strstrconst char* isSub(const char* str, const char *subs){ //特殊情况 if(!*subs) return str; const char* tmp=str; while (*tmp!='\0') { //用于每次将父串向后移动一个字符 const char* tmp1=tmp; //记录子串地址 const char* sub1=subs; while (*sub1!='\0'&&*tmp1!='\0') { //若不相等则跳出,将父串后移一个字符 if (*sub1!=*tmp1) break; //若相等且子串下一个字符是末尾则是这个父串的子串 if (*sub1==*tmp1&&*(sub1+1)=='\0') return tmp; //若相等则继续比较下一个字符 if (*sub1==*tmp1) { sub1++; tmp1++; } } tmp++; } return NULL;}int main(){ char* str1="ababcdddb"; char* str=""; const char *res=isSub(str1,str); if (res!=NULL) { cout << res << endl; } else cout << "null" << endl; //cout << isSub(str1,str) << endl; return 0;}