C语言代码分享:获取分割符之间指定位置的内容

这是我参与新手入门的第3篇文章


背景

获取分割符之间的内容是将传入字符串根据分割符号进行分割,获取指定位置的字符串内容。

遵循规则

  1. 首先确定要提取的字符串的位置,进行循环遍历获取指定分隔符前的字符串。

  2. 对于每个字符与指定分隔符进行比较,如果比较一致就认为该字符前为分割内容。

  3. 对于中文字符分割,需要先判断待分割当前字符是否是中文字符,如果是中文需判断该字符+1位置的字符是否为分隔符。

4、当循环到要提取的字符串的位置,将获取的字符串复制给传出字符串,如果已经获得循环完成分割字段位置小于要提取的字符串的位置,则将传出字符串赋值为0。

示范代码

int isChina(int n, char *s)
{
    int f = 0, i;
    int Eend;
    unsigned char *Buf;

    Buf = (unsigned char *)s;
    Eend = strlen((char *)Buf);

    if (n < Eend)
    {
        for (i = 0; i <= n; ++i)
            switch (f)
            {
            case 0:
                if (Buf[i] > 128)
                    f = 1;
                break;
            case 1:
                f = 0;
                break;
            };
    }
    if ((n == (Eend - 1)) && (f == 1))
        f = 0;
    return (f);
}
int prv_getSubStr(char *psString, long lNo, char *p3, char cFlag)
{
    long lCnt;
    char *p1, *p2;
    char sOnHanZi[3];

    lNo = lNo - 1;
    p2 = psString;
    for (lCnt = 0; lCnt <= lNo; lCnt++)
    {
        p1 = p2;
        while (*p2 != '\0')
        {
            memset(sOnHanZi, 0x00, sizeof(sOnHanZi));
            memcpy(sOnHanZi, p2, sizeof(char) * 2);
            if (isChina(0, sOnHanZi) != 0)
            {
                p2++;
                p2++;
                continue;
            }
            if (*p2 == cFlag)
            {
                break;
            }
            p2++;
        }
        if (*p2 == '\0' || lCnt == lNo)
            break;
        p2++;
    }
    if (lCnt < lNo)
    {
        p3[0] = 0;
        return 0;
    }
    memcpy(p3, p1, p2 - p1);
    p3[p2 - p1] = '\0';
    return 0;
}

复制代码

函数功能

  • 函数名:prv_getSubStr
  • 获取分割符之间指定位置的内容
  • psString:源字符串
  • lNo:位置序号
  • p3:目的字符串
  • cFlag:分割符
  • 返回码 —— 0: 成功
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享