查找字符串中指定的子串的首次出现的位置

来源:互联网 发布:嘉艺发型设计软件 编辑:程序博客网 时间:2024/05/17 03:48
/* *!============================================================== *! FNAME: SubStr.cpp *! BRIEF: *! AUTHR: RollStone *! EMAIL: jealdean@outlook.com *! VERNO: 1.0.9 *! CREAT: 2015-05-05 19:19:59 *! CHGON: 2015-05-05 22:04:12 *! *!     Copyright  (c)  2015  All Rights Reserved By Abodu Org *!============================================================== */#include <iostream>#include <string.h>#include <stdio.h>using namespace std;/** * @brief * * @param str[] * @param substr[] * * @return *      if not str or not substr return -1 *      index of substr in str */int GetSubstrFirstIndex(char str[], char substr[]) {    char* pCur=NULL,*q=NULL;    if(!str||!substr||!(pCur=strchr(str,substr[0]))) {        return -1;    }    while(pCur) {        if(!strncmp(pCur,substr,strlen(substr))) {            return (int)(pCur-str);        }        q=pCur+1;        if(!q) {            break;        }        pCur=strchr(q,substr[0]);    }    return -1;}int main() {    char sd[]="One two three two four two five";    int n=GetSubstrFirstIndex(sd,"two");    cout<<"Found the first substring :"<<(sd+n)<<endl;    return 0;}//在Linux平台上有系统自带的版本,Windows上则需要自己实现#ifndef strndup/** * @brief *  新版的复制指定字符串的前N个字符 * @param src * @param n  should be positive * * @return */char* strndup(char* src,int n) {    if(!src||n<=0) {        return NULL;    }    int srcLen=strlen(src);    int realN=(srcLen>n)?n:srcLen;    char* returnStr=(char*)malloc(realN+1);    memcpy(returnStr,src,realN);    return returnStr;}#endif //strndup
0 0