键值对

原文链接: https://blog.csdn.net/dai_wen/article/details/79187591

一、键值对问题:

键值对(”key = value”)字符串,在开发中经常使用;
每个键后面对应着相应的值, 当按下相应的键时, 就会输出相应的结果,那么如何用程序实现呢?

二、举个例子:

1.要求:

要求1:请自己定义一个接口,实现根据key获取valude;
要求2:编写测试用例。
要求3:键值对中间可能有n多空格,请去除空格

2.注意:

键值对字符串格式可能如下:
“key1 =valude1”
“key2 = valude2 ”
“key3 = valude3”

3.测试用例:

<1>“ORACLE_name=itcast” “ORACLE_name” itcast
<2>“oracle_pwd=123456” “oracle_pwd” 123456
<3>“oracle_pwd= 231256” “oracle_pwd” 231256
<4>orace_pwd= 231256,报告出错

三、算法思想:

(1)编写一个函数,利用函数实现功能,给出接口,主调函数调用;
(2)函数思想:

1、在字符串中查找是否含有关键字
2、再查找是否含有“=”
3、去掉值中的首尾空格

四、程序实现:

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

//一般情况下不要修改输入的内存块的值
int trimSpace_ok2(char *mybuf, char *outbuf)//去掉首尾空格函数
{
    int count = 0;
    int i = 0, j = 0;
    char *p = mybuf;
    j = strlen(p) -1;

    while (p[i]==' ' && p[i] != '\0')
    {
        i++;
    }
    while (p[j]==' '&& j>0)
    {
        j--;
    }
    count = j-i +1;

    memcpy(outbuf, mybuf+i, count);
    outbuf[count] = '\0';
    return 0;
}

int getKeyByValude(char *keyvaluebuf,  char *keybuf,  char *valuebuf, int * valuebuflen)
{
    char tmp[2048*10];//开辟足够的内存空间,用于存放
    int ret=0;
    char *p=keyvaluebuf;
if(keyvaluebuf==NULL||keybuf==NULL||valuebuf==NULL||valuebuflen==NULL)
    {
        ret=-1;
        return ret;
    }
    //第一步:在字符串中查找是否含有关键字
    p=strstr(keyvaluebuf,keybuf);
    if(p==NULL)
    {
        return -1;
    }
    p=p+strlen(keybuf);

    //第二步:查找是否含有=
    p=strstr(keyvaluebuf,"=");
    if(p==NULL)
    {
        return -1;
    }
    p=p+1;

    ////第三步:去掉首尾的空格字符串;
        ret = trimSpace_ok2(p, tmp);//调用函数实现
    if (ret!= 0)
    {
        printf("func trimSpace_ok2() err:%d\n", ret);
        return ret;
    }

    strcpy(valuebuf, tmp);
    *valuebuflen = strlen(tmp);

    return 0;
}

void main()
{
    int ret=0;
    //char value1[]="ORACLE_name="itcast";/*测试1 */
    /*char value1[]="oracle_pwd=123456        ";*//*测试2 */
        char value1[]="oracle_pwd=        231256";/*测试3*/
        char value1[]="orace_pwd=        231256";/*测试4*/

        //char key1[]="ORACLE_name";/*测试1的关键字 */
    //char key1[]="oracle_pwd";/*测试2 的关键字*/
        char key1[]="oracle_pwd";/*测试3的关键字*/ 

    char buf[100]={0};//必须初始化
    int len=0;

    ret =getKeyByValude(value1,key1, buf, &len);

    if(ret!=0)
    {
        printf("func getKeyByValude() err ,ret=%d\n",ret);
    }

    printf("buf=%s\n",buf);
    printf("len =%d\n",len);

    getKeyByValude(value1,key1, buf, &len);
    system("pause")}


测试结果:

<1>“ORACLE_name=itcast” “ORACLE_name” itcast
键值对_第1张图片
<2>“oracle_pwd=123456” “oracle_pwd” 123456
键值对_第2张图片
<3>“oracle_pwd= 231256” “oracle_pwd” 231256
键值对_第3张图片
<4>orace_pwd= 231256, 报告出错
键值对_第4张图片

你可能感兴趣的:(Summary,of,C++,Knowledge,Point)