码迷,mamicode.com
首页 > 其他好文 > 详细

getValueByKey

时间:2017-04-01 19:50:56      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:can   else   turn   log   跳出循环   交互   bre   结束   tin   

#include<stdio.h>

//应该是getValueByKey
int getValueByKey(char *keyValuebuf, char *keybuf, char *valuebuf, int *valuebuflen)
{
    int ret = 0;//-1错误 0未找到 >1成功 
    int tmplen = 0;
    int keylen = 0;
    char* tmpkeybuf;
    bool found = false;
    tmpkeybuf = keybuf;
    int offset;//等号前空格偏移量

    //求key的长度
    while (*tmpkeybuf != \0)
    {
        tmpkeybuf++;
        keylen++;
    }
    //[1]寻找等号
    do
    {
        if (*keyValuebuf == =)//判断等号前面的空格
        {
            offset = 0;
            while (*(keyValuebuf-offset-1)== )
            {
                offset++;
            }

            //找到了一个=号
            //[2]等号左边为key
            //如果左值和key相等 处理 跳出循环
            //如果不相等继续循环
            for (int i = 1; i <= keylen; i++)
            {
                //指针--移动到上一个字符 再向后移动到等号为止,与keybuf比较 完全相同

                //测试时候出现的问题:  =前面空格的问题
                //比如  name = XX name和等号之间有空格 当输入key为name时 无法匹配
                // X 解决方法: keyvalue的临时变量去尾部空格 在计算keylen处理 X不正确 输入的是每空格的
                //解决方法,应从keyvalbuf上下手
                if (*(keyValuebuf -offset- i) == *(tmpkeybuf - i))
                {
                    found = true;
                    continue;
                }
                else
                {
                    found = false;
                    break;
                }
            }

            //[3]等号右边第一个非空格为value(统计长度)
            if (found)
            {
                //找到了 从等号开始向右处理
                keyValuebuf++;
                //3.1trim掉value前面的空格
                while (*keyValuebuf ==  )
                {
                    keyValuebuf++;
                }
                //3.2开始copy value到valuebuf 并统计长度 遇到空格或回车或\0结束
                //  ↓↓↓↓↓ Error 原因:  &&写成||   在多条件不等于判断的时候 要任意一个不满足的时候用&&
                while (*keyValuebuf !=   && *keyValuebuf != \n && *keyValuebuf != \0)//err 指针越界挂掉 
                {
                    *valuebuf++ = *keyValuebuf++;//error! 
                    tmplen++;
                }
                //Exception ::少个‘\0‘!
                *valuebuf = \0;
                //3.4ok后 保存数据 return 结束掉函数
                *valuebuflen = tmplen;
                return tmplen;
            }

        }
        keyValuebuf++;
    } while (*keyValuebuf != \0);
    return tmplen;
}

int main()
{
    //定义变量
    int valuelen;
    char value[50];
    char key[20];
    int ret;
    //获得valuekey字符串
    char valueKey[] = "name1         =      XXX       sex1=女\n  age1=          21 \nname2 = XX sex2=男  age2=          21";
    //交互
    printf("Info String is : %s\n\n",valueKey);
    do
    {
        printf("Input Key : ");
        scanf("%s", key);
        ret = getValueByKey(valueKey, key, value, &valuelen);
        if (ret>0)
        {
            printf("\n\t find a Result : [%s] -> %s\n\n",key,value);
        }
        else if (ret==0)
        {
            printf("Err: Key Not Found  ErrCode:%d \n",ret);
        }
        else
        {
            printf("ErrCode:%d \n", ret);
        }
    } while (*key != N);

    return 0;
}

 

getValueByKey

标签:can   else   turn   log   跳出循环   交互   bre   结束   tin   

原文地址:http://www.cnblogs.com/crosys/p/6657252.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!