getValueByKey

#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;
}
时间: 2024-10-05 05:41:27

getValueByKey的相关文章

字符串--getValuebyKey()综合练习

题目: 键值对("key = valude")字符串,在开发中经常使用:要求1:请自己定义一个接口,实现根据key获取valude:40分要求2:编写测试用例.30分要求3:键值对中间可能有n多空格,请去除空格30分注意:键值对字符串格式可能如下: "key1 = valude1""key2 =       valude2          "key3  = valude3" "key4        = valude4&qu

关于java中的本地缓存-总结概述

java中的本地缓存,工作后陆续用到,一直想写,一直无从下手,最近又涉及到这方面的问题了,梳理了一下.自己构造单例.guava.ehcache基本上涵盖了目前的大多数行为了.   为什么要有本地缓存? 在 系统中,有些数据,数据量小,但是访问十分频繁(例如国家标准行政区域数据),针对这种场景,需要将数据搞到应用的本地缓存中,以提升系统的访问效率,减 少无谓的数据库访问(数据库访问占用数据库连接,同时网络消耗比较大),但是有一点需要注意,就是缓存的占用空间以及缓存的失效策略. 为什么是本地缓存,而

C#配置文件中怎么通过key来获取value值

public static string AppConfig() { return System.IO.Path.Combine(Application.StartupPath, "BlackBoxForms.exe.config"); } /// <summary> /// 根据Key获取Value值 /// </summary> /// <param name="appKey">Key</param> /// &l

记录一次帮策划写的基于VBA的数据转化工具

由于策划计算的表格结构和程序实际使用的数据表结构不一定一致,因此有时候经常需要做数据转化.把策划自己的表格转成程序需要的格式,然后再导入数据库.这次也是策划有个表,里面有多个字段分别表示多个属性,但是程序考虑到通用,不想一个属性增加一个字段,因此想用一个字段,然后采用JSON格式来表示所有属性. 因此,帮策划写了个VBA实现多个字段合并成JSON的.这个VBA可以通过Ctrl表格来配置: 源表名:策划表的名字 目标表名:程序表的名字 字段映射:程序表的字段名对应策划表的字段名.目前支持字段合并(

比较两个版本号新版本

/** * 版本信息 * * @类名 :Meichat_version * @作者 :kevin * @创建时间 :2016-10-2下午8:25:13 */public class Meichat_version extends BasicServlet { private static final long serialVersionUID = -7537429324065779134L; public void doGet(HttpServletRequest request, HttpS

perties类的操作

http://www.cnblogs.com/bakari/p/3562244.html perties类的操作 知识学而不用,就等于没用,到真正用到的时候还得重新再学.最近在看几款开源模拟器的源码,里面涉及到了很多关于Properties类的引用,由于Java已经好久没用了,而这些模拟器大多用Java来写,外加一些脚本语言Python,Perl之类的,不得已,又得重新拾起.本文通过看<Java编程思想>和一些网友的博客总结而来,只为简单介绍Properties类的相关操作. 一.Java P

获取tomcat上properties文件的内容——方便文件存储位置的修改,解耦和

在java web开发的时候经常会用到读取读取或存放文件,这个文件的默认路径在哪里呢?写死在程序里面显然是可以的,但这样子不利于位于,假如有一天项目从window移植到linux,或者保存文件的路径变了,就需要去源代码中查找,进行替换,这样子不仅效率低,而且程序的耦合度也会过高,这里我用了一个properties文件用于存放文件的保存路径,需要保存或者读取都来自己properties所保存的路径. 1.我存放的propeities文件路径 因为linux和window上面的分盘是不一样的,所以我

分析html格式数据,根据正则表达式获取所需数据,并存入数据库

例子为获取<dl>中的<dt></dt><dd></dd>中的内容,由于在<dt></dt>标签中还存在<a>标签,所有会一同举例说明.第一次做不够优化,共同学习. <!DOCTYPE html> <html> <head> <title><title> </head> <body> <dl class="hel

Java中Properties类

Java中Properties类简介 知识学而不用,就等于没用,到真正用到的时候还得重新再学. Properties类继承自Hashtable,如下: 它主要用于读取Java的配置文件,由于配置文件中的很多变量时经常改变的,通过这个类可以让用户脱离程序本身去修改相关的变量配置.在Java中,其配置文件常为.properties文件,格式为文本文件,内容的格式为“键=值”的格式,#打头的是注释行,Properties会忽略注释.允许只有key没有value,没有value时,value会被set成