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 );
- isspace()
功能:判断当前字符是否为空格
int isspace(int c);
3. 思路
- 首先需要在一串字符串中,查找到所对应的key。
- 因为键值对是成对出现,所以还要继续判断该key后方是否有 ‘=’,如果有,则代表这是需要查找的键值对。
- 在key对应的value中,value前后可能存在空格,所以要去除value前后的空格。
- 得到key对应的value
4. 代码实现
#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;
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--;
}
if (end == 0)
{
return -2;
}
n = end - begin + 1;
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;
kvbuf = strstr(kvbuf, kbuf);
if (kvbuf == 0)
{
return -2;
}
kvbuf += sizeof(kbuf);
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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)