C语言中用strstr()和strncpy()实现split()

直接贴代码吧

/**
* 以指定字符串分割源字符串到数组
* @param char * source 源字符串
* @param char *[] strArray 存放分割后字串的数组
* @param char * separator 用来分割的字符串
* @return int 分割后的子串数目
*/
int split(char *source, char strArray[][50], char *separator)
{
    char *position;
    int count = 0;

    while (NULL != (position = strstr(source, separator)))
    {
        strncpy(strArray[count++], source, position-source); //将子串复制到数组中
        source = position + 1;                               
    }
    strcpy(strArray[count++], source);
    return count;
}

上面的函数有两个问题:

  1. 当两个分隔字符串连续出现,如:对于串"just,,for,test!",当分隔字符串为“,”时,会产生一个空串,并存入数组中,显然这不是我们需要的;
  2. 只有当分隔字符串为一个字符时,上面的函数执行结果才正确 
针对这两个问题进行修改,修改后的函数如下:

/**
* 以指定字符串分割源字符串到数组
* @param char * source 源字符串
* @param char *[] strArray 存放分割后字串的数组
* @param char * separator 用来分割的字符串
* @return int 分割后的子串数目
*/
int split(char *source, char strArray[][50], char *separator)
{
    char *position;
    int count = 0;

    while (NULL != (position = strstr(source, separator)))
    {
        if (position != source)          //增加判断,剔除空串
        {
            strncpy(strArray[count++], source, position-source);
        }
        source = position + strlen(separator);  //用separator的长度代替1
    }
    strcpy(strArray[count++], source);
    return count;
}


你可能感兴趣的:(C语言中用strstr()和strncpy()实现split())