多对一映射拆包

遇到一个需求,需要在没有数据库的情况下,实现后端返回码多对一映射。请大家指出不足

代码如下:

#include <stdio.h>
#include <string.h>


/*
*    函数名称 BackMapp
*    入    参 pBuff:待解析字符串 caInBuff:需要映射的返回码 caFirstSeparator:第一分割符 caSecondlySeparator:第二分割符 
*    出    参 pRetBuff:返回结果
*    返 回 值 0:成功 -1:失败 
*    功    能 根据配置文件解析出对应的返回码
*/
int BackMapp( char* const pcBuff,
    char* const pcInBuff,
    char* pcRetBuff ,
    char* const pcFirstSeparator ,
    char* const pcSecondlySeparator)
{
    char caBigBuff[1024] = {0x00};
    char caOldBuff[1024] = {0x00};
    char caNewBuff[1024] = {0x00};
    char caInBuff[1024] = {0x00};
    char caOutbuff[1024] = {0x00};
    char caFirstSeparator[1024] = {0x00};
    char caSecondlySeparator[1024] = {0x00};
    char *pcTempBuff = NULL;
    char *pStrtok = NULL;
    char *pStrstr = NULL;

    if( !strlen(pcBuff)||
        !strlen(pcInBuff)||
        !strlen(pcFirstSeparator)||
        !strlen(pcSecondlySeparator)
        ){
            return -1;
    }

    strncpy(caBigBuff , pcBuff , strlen(pcBuff));
    strncpy(caInBuff  , pcInBuff, strlen(pcInBuff));
    strncpy(caFirstSeparator , pcFirstSeparator ,strlen(pcFirstSeparator));
    strncpy(caSecondlySeparator , pcSecondlySeparator , strlen(pcSecondlySeparator));

    pStrtok = strtok_s( caBigBuff , caFirstSeparator , &pcTempBuff );

    while( pStrtok != NULL )
    {
        pStrstr = strstr(pStrtok , caSecondlySeparator );
        if( pStrstr != NULL )
        {
            *pStrstr = '\0';
            printf("%s\n",pStrtok);
            if( strstr(pStrtok , caInBuff) != NULL )
            {
                strncpy(caOutbuff, pStrstr + strlen(caSecondlySeparator),strlen(pStrstr + strlen(caSecondlySeparator)));
                strncpy(pcRetBuff, caOutbuff , strlen(caOutbuff));
                return  0;
            }
        }
        pStrtok = strtok_s( NULL , caFirstSeparator , &pcTempBuff);        
    }
    return -1;
}

int main()
{
    char caOutBuff[1024] = {0x00};

    int iRet = BackMapp("1,2,3:1@|4,5,6:2@|7:3@|8:-1@|", "8" , caOutBuff , "@|" , ":");
    if(iRet == 0)
    {
        printf("%s\n" , caOutBuff);
    }
    while(1){}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值