在字符串中找到全部是由指定的字符组成的最长子串

/*
*!==============================================================
*! FNAME: search.cpp
*! BRIEF:
*! AUTHR: RollStone
*! EMAIL: jealdean@outlook.com
*! VERNO: 1.0.31
*! CREAT: 2015-04⑵8 23:43:04
*! CHGON: 2015-04⑶0 07:53:00
*!
*! Copyright (c) 2015 All Rights Reserved By Abodu Org
*!==============================================================
*/

///编写1个 C 函数,该函数在1个字符串中找到可能的最长的全部是由指定的字符组成的子字符串

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#ifndef strndup
//自己手动实现 复制字符串前 n 个字符
char* strndup(const char* src,int nMax) {
int srcLen=strlen(src);
int n=(srcLen<nMax)?srcLen:nMax;
char* dest=(char*)calloc(n+1,sizeof(char));
while(--n>=0)
dest[n]=src[n];
return dest;
}
#endif

/**
* @brief
* 在1个字符串中找到可能的最长的子字符串(该子字符串由同1字符组成)
* @param str[]
* @param tc 目标字符
* @param rcLen 返回的目标子串的长度
*
* @return
* tc没有在str中出现,返回NULL,否则返回最长子串的起始位置
*/

char* search_max_substr(char src[],char ch,int* rcLen) {
char* pStart;
if(!src||!(pStart=strchr(src,ch))) {
return NULL;
}
*rcLen=1;//最少有1个
char* pEnd=strrchr(src,ch);
if(pEnd==pStart) { //有且唯一唯1的1个字符ch
return pStart;
}
char* rcOut=pStart;
char* pCur=pStart+1;
while(pCur-1<=pEnd) {
if( *(pCur-1)==*pCur) {
pCur++;
continue;
}
//当前指针与其紧邻的前1个指针的内容不相同
if(pCur-pStart>*rcLen) { //找到个数大于rcLen
rcOut=pStart;
*rcLen=pCur-pStart; //记录旧的移动次数
}
//找到剩下的字符串内的第1个ch
if(!pCur||!(pStart=strchr(pCur,ch))) {
break;
}
pCur=pStart+1;
}
return rcOut;
}

int main ( int argc, char* argv[] ) {
char s[]="AAAABBBCCDDEFFFFFFFFFF";
int n=0;
char* p=search_max_substr(s,'D',&n);
if(p) {
char* sbk=strndup(p,n);
if(sbk) {
printf("RESULT:%s
"
,sbk);
free(sbk);
}
}
return 0;
} // end main

波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » 在字符串中找到全部是由指定的字符组成的最长子串

发表评论

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系站长
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡