【发布时间】:2018-04-10 02:41:48
【问题描述】:
我正在使用这个函数来获取两个子字符串之间的子字符串。
char * extract_between(const char *str, const char *p1, const char *p2/*, const int instance*/)
{
//int count;
const char *i1 = strstr(str, p1);
/*for (count = 0; ; ++count) {
const char *i1 = strstr(str, p1);
if (count==instance)
break;
}*/
if(i1 != NULL)
{
const size_t pl1 = strlen(p1);
const char *i2 = strstr(i1 + pl1, p2);
if(p2 != NULL)
{
/* Found both markers, extract text. */
const size_t mlen = i2 - (i1 + pl1);
char *ret = malloc(mlen + 1);
if(ret != NULL)
{
memcpy(ret, i1 + pl1, mlen);
ret[mlen] = '\0';
return ret;
}
}
}
return 0;
}
我想修改它,以便它本身搜索子字符串的第 n 个实例。这怎么可能?我试过 for(count) 但我不确定如何格式化它。
【问题讨论】:
-
请发布一些示例,以明确您的目标。
-
因为
strstr定位第一个匹配项,您将不得不使用strstr来定位第一个指针,然后将源字符串从该位置开始,然后再次使用strstr新的、较短的字符串,然后重复instance次数。 -
顺便说一句,这个函数可能是递归的好候选;每次将较短的字符串和
instance-1传递给自身。
标签: c string substring instance