/*
*!==============================================================
*! 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
查找字符串中指定的子串的首次出现的位置
最新推荐文章于 2023-12-20 17:14:52 发布