在字符串中查找特定的子字符串,C语言

本文介绍了在C语言中实现的一个用于在字符串中查找特定子字符串的函数xString_SearchKey,包括函数实现、验证过程以及适用于单片机的限制。作者提供了测试用例和验证方法。
摘要由CSDN通过智能技术生成

在 C 语言的标准库文件中,提供了一系列用于字符串操作的相关函数,你可以自行学习并使用这些函数。

这里将介绍一个我们自己实现的函数,用于在字符串中查找特定的子字符串,并经过验证,可供大家参考使用。

一、实现

#define XSTRING_FAIL ((int16_t)-1)

int16_t xString_SearchKey(const char *sSource, const char *sKey)
{
    uint16_t i, j;

    if (*sKey == '\0')
    {
        return XSTRING_FAIL;
    }

    // Start address for comparison
    for (i = 0; ((i < 0x7FFF) && (sSource[i] != '\0')); i++)
    {
        for (j = 0; ((i + j) < 0x7FFF); j++)
        {
            // Match with sKey
            if (sKey[j] == '\0')
            {
                return i;
            }
            // Different, including sSource[i + j] == '\0'
            else if (sSource[i + j] != sKey[j])
            {
                break;
            }
        }
    }

    return XSTRING_FAIL;
}
  • sSource: 源字符串
  • sKey: 需要匹配的子字符串
  • 返回值使用有符号的 16 位整数:>=0 表示匹配成功,数值就是匹配到的起始位置,=-1 表示匹配失败
  • 如果sKey字符串为空,则直接返回匹配失败
  • 源字符串的长度最长不能超过 0x7FFF,这对于单片机程序来说通常是足够的

二、验证

static const struct
{
    const char *s;
    const char *k;
} oStr[] = {
    // 可按下列格式增加数据
    {"uuabcdefghiuuusijfoasidfjsoadf",      "uuu"},
    {"hosifuoasjfso293sjdi203",             "abc"},
};

void TestXString_Perform(void)
{
    uint8_t u8Cnt;

    // 搜索字符串
    for (u8Cnt = 0; u8Cnt < ARRAY_SIZE(oStr); u8Cnt++)
    {
        printf("Search %s in %s, ", oStr[u8Cnt].k, oStr[u8Cnt].s);
        printf("Position: %d\n\n", xString_SearchKey(oStr[u8Cnt].s, oStr[u8Cnt].k));
    }
}
  • oStr 是一个结构体数组变量,结构体中有两个成员,分别指向源字符串和需要搜索的子字符串
  • 你可以更改 oStr 变量中的现有字符串,以验证搜索功能的正确性
  • 你也可以按这个格式增加字符串,以验证搜索功能的正确性
  • 增删改 oStr 变量的内容,不要修改 TestXString_Perform 函数,这个函数将打印所有的字符串,并所有的搜索结果

完整的代码和验证程序,请参考chip_c: 芯片C语言框架和实用程序集合

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值