[C语言] 利用库函数实现查找指定键值对功能
Posted 哦哦呵呵
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[C语言] 利用库函数实现查找指定键值对功能相关的知识,希望对你有一定的参考价值。
1. 功能描述
键值对(“key = value”)字符串,在开发中经常使用
要求1:请自己定义一个接口,实现根据key获取.
要求2:编写测试用例。
要求3:键值对中间可能有n多空格,请去除空格
注意:键值对字符串格式可能如下:
"key1 = value1"
"key2 = value2"
"key3 = value3"
"key4 = value4"
"key5 = "
"key6 ="
2. 所使用函数
- strstr()
功能:查找母串中子串出现的位置
char *strstr( const char *string, const char *strCharSet );
// 参数: const char *string : 母串,存储字符串
// const char *strCharSet : 用来在母串中查找的子串
// 返回值: 如果查询到结果,则返回指向第一次出现的位置
// 如果未查询到结果,则返回空指针
- isspace()
功能:判断当前字符是否为空格
int isspace(int c);
// 参数: int c: 传入字符的ascii值
// 返回值: 如果当前字符为空格,则返回非零0,如果不知,返回0
3. 思路
- 首先需要在一串字符串中,查找到所对应的key。
- 因为键值对是成对出现,所以还要继续判断该key后方是否有 ‘=’,如果有,则代表这是需要查找的键值对。
- 在key对应的value中,value前后可能存在空格,所以要去除value前后的空格。
- 得到key对应的value
4. 代码实现
/*
* getKeyByValue();
* 功能: 挑出键值对所对应的值
* 参数:
* keyvaluebuf: 键值对
* keybuf : 所要查询的键名称
* valuebuf : 用于存放键所对应值的字符串
* valuebuflen: 键所对应值的字符串的长度
* 返回值:
* 成功: 0
* 失败: 非0
*/
/*
* trimSpace();
功能获取非空字符串
参数:
inbuf: 原始字符串buf首地址
outbuf: 非空字符串buf首地址
返回之:
成功:0
失败:非0
*/
#include <stdio.h>
#include <ctype.h>
// 去除非空字符串
int trimSpace(char* inbuf, char* outbuf)
{
if (inbuf == NULL || outbuf == NULL)
{
return -1;
}
char* p = inbuf;
char* buf = outbuf;
// 定义字符串vlaue的起点终点
int begin = 0;
int end = strlen(inbuf) - 1;
int n = 0;
// 因为键值对中间会有空格,所以要去除空格
while ( isspace(inbuf[begin]) && (inbuf[begin] != NULL))
{
begin++;
}
while (isspace(inbuf[end]) && end > 0)
{
end--;
}
// 如果字符串为0 那么字符串不存在
if (end == 0)
{
return -2;
}
// 记录字符串长度
n = end - begin + 1;
// 将字符串拷贝至vbuf,并通过形参返回至主函数
strncpy(outbuf, inbuf + begin, n);
return 0;
}
// 查找键所对的值,并且去除等号
int getKeyByValue(char* keyvaluebuf, char* keybuf, char* valuebuf, int* valuebuflen)
{
if (keyvaluebuf == NULL || keybuf == NULL || valuebuf == NULL || valuebuflen == NULL)
{
return -1;
}
char* kvbuf = keyvaluebuf;
char* kbuf = keybuf;
char* vbuf = valuebuf;
// 查找键值,并跳转至后方继续查找
// kbbuf = "= value"
// "key4 = vluue " -> " = value "
kvbuf = strstr(kvbuf, kbuf);
if (kvbuf == 0)
{
return -2;
}
kvbuf += sizeof(kbuf);
// 查到 =
// 跳过 = 重新设置查找位置
// " = value " -> " value "
kvbuf = strstr(kvbuf, "=");
if (kvbuf == 0)
{
return -3;
}
kvbuf += sizeof("=");
// 取出非空字符串
int ret = 0;
ret = trimSpace(kvbuf, vbuf);
if (ret != 0)
{
printf("trimSpace err:%d\\n", ret);
return -4;
}
// 获取长度,通过*间接赋值
*valuebuflen = strlen(vbuf);
return 0;
}
int main(void)
{
char* keyvaluebuf = "key1 = ";
char* key = "key1";
char value[100] = { 0 };
int valuelen = 0;
int ret = 0;
ret = getKeyByValue(keyvaluebuf, key, value, &valuelen);
if (ret != 0)
{
printf("getKeyByValue err:%d\\n", ret);
return ret;
}
printf("val = %s\\nvaluebuflen = %d\\n", value, valuelen);
printf("\\n");
return 0;
}
以上是关于[C语言] 利用库函数实现查找指定键值对功能的主要内容,如果未能解决你的问题,请参考以下文章
C 语言文件操作 ( 配置文件读写 | 写出或更新配置文件 | 追加键值对数据 | 更新键值对数据 )
C 语言C 项目开发代码规范 ( 形参合法性判断 | 函数返回值局部变量 | 函数中不用全局变量 | 函数中使用局部变量接收形参 | 函数返回值 | 形参作返回值 | 形参返回值处理 )