C语言实现split()函数
#include <stdio.h>
#include <string.h>
/**
* @description: 查找特定字符串第一次出现的位置并拷贝其之前内容
* @param {const char *} pcSrc: 源字符串
* @param {const char *} pcSplit: 特定字符串
* @param { char *} pcTarget: 数据域
* @return {int} -1:指针为空,0:未找到特定字符串,>0:特定字符串出现位置
*/
int LF_string_split(const char *pcSrc, const char *pcSplit, char *pcTarget)
{
char * pcPointer = NULL;
int iTargetLen = 0;
if((NULL == pcSrc) || (NULL == pcSplit) || (NULL == pcTarget))
{
printf("input is null\n");
return -1;
}
pcPointer = strstr(pcSrc, pcSplit);
if (pcPointer)
{
iTargetLen = pcPointer - pcSrc;
if(iTargetLen == 0)
{
iTargetLen = 1;
}
strncpy(pcTarget, pcSrc, iTargetLen);
printf("iTargetLen[%d]\n", iTargetLen);
return iTargetLen;
}
else
{
printf("pcSplit[%s] is exist in the pcSrc[%s]\n", pcSplit, pcSrc);
return 0;
}
}
/**
* @description: 查找特定字符串第一次出现的位置并拷贝其之前内容(指针实现)
* @param {const char *} pcSrc: 源字符串
* @param {const char *} pcSplit: 特定字符串
* @param { char *} pcTarget: 数据域
* @return {int} -1:指针为空,0:未找到特定字符串,>0:特定字符串出现位置
*/
int LF_string_split_pointer(const char *pcSrc, const char *pcSplit, char *pcTarget)
{
char * pcPointer = NULL;
char * pcSrcPointer = NULL;
char * pcSplitPointer = NULL;
int iTargetLen = 0;
if((NULL == pcSrc) || (NULL == pcSplit) || (NULL == pcTarget))
{
printf("input is null\n");
return -1;
}
pcSrcPointer = pcSrc;
pcSplitPointer = pcSplit;
pcPointer = pcSrc;
while(*pcPointer != '\0')
{
pcSrcPointer = pcPointer;
pcSplitPointer = pcSplit;
while((*pcSrcPointer != '\0') && (*pcSplitPointer != '\0') && (*pcSrcPointer == *pcSplitPointer))
{
pcSrcPointer++;
pcSplitPointer++;
}
if(*pcSplitPointer == '\0')
{
iTargetLen = pcPointer - pcSrc;
if(iTargetLen == 0)
{
iTargetLen = 1;
}
strncpy(pcTarget, pcSrc, iTargetLen);
printf("iTargetLen[%d]\n", iTargetLen);
return iTargetLen;
}
pcPointer++;
}
return 0;
}
int main()
{
int iLen = 0;
char cSrc[] = "http://192.168.100.100:8209/communication-center/api/record/upload";
char cSplit[] = "api";
char cTarget[128] = {0};
//iLen = LF_string_split(cSrc, cSplit, cTarget);
iLen = LF_string_split_pointer(cSrc, cSplit, cTarget);
printf("cSrc[%s] \n",cSrc);
printf("cSplit[%s]\n", cSplit);
printf("cTarget[%s]\n",cTarget);
printf("iLen[%d]\n", iLen);
return 0;
}
链接: https://blog.csdn.net/weixin_61486281/article/details/126938241