C语言实现字符串分割,实现Java语言中substring()函数

我们知道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语言中的其他字符串分割方法处理数据不是很方便,而这个函数使用起来是非常便捷的。

发布了29 篇原创文章 · 获赞 83 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/l59565455/article/details/87099194