原理概括
原理图解
核心代码
/******************************************************************************
* 负 责 人 : 易齐
* 创建日期 :2022-01-22 13:56:55
* 函数功能 : 以 特定字符 分隔字符串
* 输入参数 : argv: 装分隔好的字符串的指针数组 ,str: 需要分隔的字符串 , separator:分隔字符
* 输出参数 : 分隔好后 指针数组 的长度
* 返 回 值 :无
* 调用关系 :无
* 其 它 :无
******************************************************************************/
int split(char *argv[], char *str, char separator)
{
//定义双指针
char *start_c = str;
char *end_c = str;
//定义分隔结果编号
int index = 0;
//反复遍历
while (*end_c != '\0')
{
//如果遇到了分隔符
if (*end_c == separator)
{
//分隔符连续出现
if (start_c == end_c)
{
argv[index] = NULL;
}
//分隔符中间有字符
else
{
argv[index] = start_c;
}
//将分隔符置换为结束符
*end_c = '\0';
index++;
start_c = end_c + 1;
}
end_c++;
}
//处理最后一次遍历结果
if (start_c != end_c)
{
argv[index] = start_c;
}
//处理最后一次遍历结果 如果两个指针位置一直,说明数据无效
else
{
index--;
}
//返回分隔后数组的长度
return index;
}
测试代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define GPRMC_MAX_DATA_NUMS 14
int split(char *argv[], char *str, char separator);
int main()
{
// $GNRMC,,V,,,,,,,,,,N,V*37
char str[] = "$GNRMC,,V,,,,,,,,,,N,";
char *argv[GPRMC_MAX_DATA_NUMS];
int len = split(argv, str, ',');
int i = 0;
for (i = 0; i <= len; i++)
{
printf("=%s=\n", argv[i]);
}
return 0;
}
/******************************************************************************
* 负 责 人 : 易齐
* 创建日期 :2022-01-22 13:56:55
* 函数功能 : 以 特定字符 分隔字符串
* 输入参数 : 装分隔好的字符串的指针数组 ,需要分隔的字符串 , 分隔字符
* 输出参数 : 分隔好后 指针数组 的长度
* 返 回 值 :无
* 调用关系 :无
* 其 它 :无
******************************************************************************/
int split(char *argv[], char *str, char separator)
{
//定义双指针
char *start_c = str;
char *end_c = str;
//定义分隔结果编号
int index = 0;
//反复遍历
while (*end_c != '\0')
{
//如果遇到了分隔符
if (*end_c == separator)
{
//分隔符连续出现
if (start_c == end_c)
{
argv[index] = NULL;
}
//分隔符中间有字符
else
{
argv[index] = start_c;
}
//将分隔符置换为结束符
*end_c = '\0';
index++;
start_c = end_c + 1;
}
end_c++;
}
//处理最后一次遍历结果
if (start_c != end_c)
{
argv[index] = start_c;
}
//处理最后一次遍历结果 如果两个指针位置一直,说明数据无效
else
{
index--;
}
//返回分隔后数组的长度
return index;
}
测试结果