C语言键值对(key-value)操作练习
#include "stdlib.h"
#include "stdio.h"
#include "string.h"// 求去掉空格后的字符串
int trimSpaceStr(char* ptr, char* out_buf) {int ret = 0;int count = 0;int head, end;head = 0;end = strlen(ptr) - 1; // 注意:从0开始,所以要长度-1//printf("ptr[end]:%c\n", ptr[end]);//printf("strlen(ptr):%d, end:%d\n", strlen(ptr), end);while (isspace(ptr[head]) && ptr[head] != '\0') {head++;}while (isspace(ptr[end]) && end > 0) {end--;}//if ( end > head) { // 避免char* ptr = " "; 字符串都是空格时,end - head为负数// count = end - head + 1;//}count = end - head + 1;strncpy(out_buf, ptr + head, count);out_buf[count] = '\0';return ret;
}// 正确实例demo:
// C++工程项目,写代码思路逻辑清晰,让人看一眼能很快明白。
int getKeyByValue(char* pKeyValue, char* pKey, char* pValue) {int rv = 0;char* p = NULL;char buf[1024] = {0}; // 用于局部变量在函数内调试// 输入参数异常判断逻辑//if (pKeyValue == NULL || pKey == NULL || pValue == NULL) {// rv = -1;// printf("func getKeyByValue() err:%d pKeyValue == NULL || pKey == NULL || pValue == NULL\n", rv);// return rv;//}if (pKeyValue == NULL) {rv = -1;printf("func getKeyByValue() err:%d pKeyValue is NULL\n", rv);return rv;}if (pKey == NULL) {rv = -1;printf("func getKeyByValue() err:%d pKey is NULL\n", rv);return rv;}if (pValue == NULL) {rv = -1;printf("func getKeyByValue() err:%d pValue is NULL\n", rv);return rv;}// 1,在pKeyValue中查找是否有关键字pKeyp = strstr(pKeyValue, pKey);if (p == NULL) {// pKeyValue字符串中未找到keyrv = -1;printf("func getKeybyValue() err:%d 没有关键字pKey:%s\n", rv, pKey);return rv;}p = p + strlen(pKey); // 为下次检索做准备// 2,有没有=等号p = strstr(p, "=");if (p == NULL) {// pKeyValue字符串中未找到=等号rv = -2;printf("func getKeybyValue() err:%d 没有=等号\n", rv);return rv;}p = p + 1; // 为下一次提取value做准备// 3,提取出value//rv = trimSpaceStr(p, buf);rv = trimSpaceStr(p, pValue);if (rv != 0) {printf("func trimSpaceStr err:%d\n", rv);return rv;}return 0;
}// 不推荐的写法-if,for深度嵌套逻辑:
// 工程项目上,会尽量避免if,for等等深度嵌套逻辑,这会让人看一眼还不明白逻辑。
int getKeyByValue01_Error(char* pKeyValue, char* pKey, char* pValue) {char rv = 0;char* p = NULL;char buf[1024] = { 0 }; // 用于局部变量在函数内调试// 1,在pKeyValue中查找是否有关键字pKeyp = strstr(pKeyValue, pKey);if (p != NULL) {p = p + strlen(pKey); // 为下次检索做准备// 2,有没有=等号p = strstr(p, "=");if (p != NULL) {p = p + 1; // 为下一次提取value做准备// 3,提取出value//rv = trimSpaceStr(p, buf);rv = trimSpaceStr(p, pValue);if (rv != 0) {printf("func trimSpaceStr err:%d\n", rv);return rv;}}}return 0;
}void main() {int ret = 0;char KeyValue[] = "key1=value1";char Key[] = "key1";char Value[1024] = {0};ret = getKeyByValue(KeyValue, Key, Value);if (ret != 0) {printf("func getKeyByValue() err:%d\n", ret);}printf("Value:%s\n", Value);system("pause");
}
C语言键值对(key-value)操作练习相关推荐
- hash表--c语言 字符串键值配对——(key, value)
c语言键值配对--(key, value) 看一个C++项目时,其中解析配置文的部分引发了我的思考. 配置文件问普通字符文件,内容都是类似 如下: ipaddr=127.0.0.1 port=888 ...
- php使用redis生成自增序列号码,Redis使用Eval多个键值自增的操作实例
在PHP上使用Redis 给多个键值进行自增,示例如下: $set['money'] = $this->redis->hIncrByFloat($key, $hour .'_money', ...
- python字典键值唯一_python字典操作详解
python字典是一个无序.以键值对存储的数据类型,数据关联性强.唯一一个映射数据类型.键:必须是可哈希(不可变的数据类型:字符串.数字.元组.bool)值,并且是唯一的 None: none 是一个 ...
- 键值的 key 和 value 允许为null吗
总结: HashMap对象的key.value值均可为null. HahTable对象的key.value值均不可为null. 两者的的key值均不能重复,若添加key相同的键值对 ...
- Mybatis 之 foreach 批处理 map 中的键值 为list 的操作
foreach一共有三种类型,分别为List,[](array),Map三种. foreach的第一篇用来将List和数组(array). 下面表格是我总结的各个属性的用途和注意点. foreach属 ...
- Spark 键值对RDD操作
https://www.cnblogs.com/yongjian/p/6425772.html 概述 键值对RDD是Spark操作中最常用的RDD,它是很多程序的构成要素,因为他们提供了并行操作各个键 ...
- 通过Value获取Map中的键值Key的四种方法
1 简介 我们都知道Map是存放键值对<Key,Value>的容器,知道了Key值,使用方法Map.get(key)能快速获取Value值.然而,有的时候我们需要反过来获取,知道Value ...
- Redis中字符串string数据类型(保存(设置键值、过期时间、设置多个键值、追加值)、获取(获取单一键值、获取多个键值))
字符串类型是 Redis 中最为基础的数据存储类型,它在 Redis 中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等.在Redis中字符串类型的V ...
- React学习(3)——列表、键值与表单
为什么80%的码农都做不了架构师?>>> 本文记录了在官网学习如何使用JSX+ES6开发React的过程. . 全文共分为3篇内容: JSX语法与React组件 状态.事件与动 ...
- python字典键值可以是元组或列表吗_Python列表、元组、字典、集合的内置使用方法...
列表: 是一种可以存储多个值得数据容器 内容是有序的 可以存储任何数据类型 可以存储重复的元素 是可变类型(当内容发生变化时id不变) 元组: 也是一种可以存储多个值得数据容器 元组中的元素不可以被修 ...
最新文章
- Win2008虚拟化实战之Hyper-V快速设置
- ubuntu安装(owncloud-docker安装)
- gitblit如何迁移入gitlab合并迁移_github仓库迁移到gitlab以及gitlab仓库迁移到另一个gitlab服务器...
- python操作dom_Python Dom 的介绍和使用day1
- 使用iScroll实现上拉或者下拉刷新
- 网上读书关于软件测试,【读书笔记】之软件测试
- python的urllib2包基本使用方法
- ie 11 cookie 的值为空
- python动图自动识别,自动识别图像中的模式
- Linux下设置定期执行脚本
- linux下hg无法运行_linux下Mercurial Hg的配置方法
- 迅雷对电驴资源的限制
- 思维导图如何转换成图片
- [Python Nonebot]QQ机器人相关API / 网址介绍
- mysql salve从库设置read only 属性
- 2020年7月各大城市与程序员平均工资排行榜
- Javaweb基础-servlet应用1
- 五 、常用基本命令(重要)
- vscode无法打开浏览器预览解决方案
- 朋友圈一杠中间一个点_做好“五个一”,打造吸引人的朋友圈门面
热门文章
- 报 刊 集 锦(转载)
- Qt 中Socket编程实例
- 安卓手机小说阅读器_粉笔免费小说阅读器app下载-粉笔免费小说阅读器APP手机版v1.0.1...
- Android开发CompoundButton抽象类控件类的使用UI之Radio、Check、Toggle
- Jenkins非常详细的教程四(钩子程序,定时构建实现)
- ExtJS2.0实用简明教程——可编辑表格EditorGridPanel
- N81各种问题解决汇总
- Java解析魔兽争霸3录像W3G文件(一):Header
- 抽象代数学习笔记(抽象代数的历史、运算)
- 计算机唱歌按键学猫叫6,电脑键盘按键的功能介绍(最全的键盘各键及组合键功能说明)...