我们知道Java语言中有字符串分割函数substring()使用起来非常方便,先简要介绍一下这个函数的功能。
在java中 substring()方法有两种用法,
-
beginIndex -- 起始索引(包括)
-
endIndex -- 结束索引(不包括)
第一种:
public String substring(int beginIndex)
返回一个新的字符串,它是此字符串的一个子字符串。该子字符串从指定索引处的字符开始,直到此字符串末尾。
第二种:
public String substring(int beginIndex, int endIndex)
返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始,直到索引 endIndex - 1 处的字符。因此,该子字符串的长度为 endIndex-beginIndex。
而我们今天要用C语言实现类似功能,与Java的第二种方法类似。
函数原型:
char* substring(char* ch, int pos, int length)
{
char* p = ch;//定义一个字符指针,指向传递进来的ch地址。
char* subch = (char*)calloc(sizeof(char), length + 1);//通过calloc来分配一个length长度的字符数组,返回的是字符指针。
int i;
p = p + pos;//是p指针指向pos位置。
for (i = 0; i < length; i++)
{
subch[i] = *(p++);//循环遍历赋值数组。
}
subch[length] = '\0';//加上字符串结束符。
return subch; //返回分配的字符数组地址。
}
我们写一个小代码测试一下:
#include <stdio.h>
#include <stdlib.h>
char* substring(char* ch, int pos, int length)
{
char* p = ch;//定义一个字符指针,指向传递进来的ch地址。
char* subch = (char*)calloc(sizeof(char), length + 1);//通过calloc来分配一个length长度的字符数组,返回的是字符指针。
int i;
p = p + pos;//是p指针指向pos位置。
for (i = 0; i < length; i++)
{
subch[i] = *(p++);//循环遍历赋值数组。
}
subch[length] = '\0';//加上字符串结束符。
return subch; //返回分配的字符数组地址。
}
char* G;//G1
char* X;//x
char* Ex;//目的地x坐标
char* Y;//y
char* Ey;//目的地y坐标
void main()
{
char *string = "G1 X148.981 Y103.950 E8.76037";//3D切片软件生成的G代码
char* tstStr = string;
G = substring(tstStr, 0, 2);
X = substring(tstStr, 3, 1);
Ex = substring(tstStr, 4, 7);
Y = substring(tstStr, 12, 1);
Ey = substring(tstStr, 13, 7);
printf("%s\n", string);
printf("%s\n",G);
printf("%s\n",X);
printf("%s\n",Ex);
printf("%s\n",Y);
printf("%s\n",Ey);
}
结果如图所示:
ok,我们已经实现了所说的功能。
C语言分割字符串还有其他方法,在此不再一一介绍。此方法希望可以帮到大家。
我写这个函数是用来处理cura软件生成的G代码程序的,读取文件,字符串分分割,处理数据。C语言中的其他字符串分割方法处理数据不是很方便,而这个函数使用起来是非常便捷的。