#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
/*
4.键值对("key = value")字符串,在开发中经常使用
需求1:请自己定义一个接口,实现根据key获取。
需求2:填写测试用例。
需求3:键值对中间可能有n多空格,请去除空格
注意:键值对字符串格式可能如下:
"key1 = value1"
"key2 = value2"
"key3 = value3"
"key4 = value4"
"key5 = "
"key6 = "
int getKeyByValue(char *keyvaluebuf,char *keybuf,char *valuebuf,int* valuebuflen)
*/
int trimspace(char* inbuf, char* outbuf)//找两头堵模型中的有效字符串
{
if (inbuf == NULL || outbuf == NULL)
{
return -1;
}
int begin = 0;
int end = strlen(inbuf) - 1;
int n = 0;
if (end < 0)
{
return -2;
}
//从左往右
//如果当前字符为空格,且字符串没有查找结束
while (inbuf[begin]==" " && inbuf[begin] != 0)//也可以 (p[begin]==' ' && p[begin] != 0)
{
begin++;//位置从左往右移动一位
}
//从右往左
//如果当前字符为空格,且字符串没有查找结束
while (inbuf[end]=" " && end > 0)
{
end--;//位置从右往左移动一位
}
if (end == 0)//判断是否空串
{
return -3;
}
n = end - begin + 1;
strcpy(outbuf, inbuf + begin, n);
//补字符串结束符\0
outbuf[n] = 0;
return 0;
}
int main01()
{
char* p = " abcdefgHH ";
char buf[100] = { 0 };
int ret = 0;
ret = trimspace(p, buf);
if (ret != 0)
{
printf("trimspace error:%d\n", ret);
return ret;
}
printf("buf=%s\n", buf);
printf("\n");
return 0;
}
int getKeyByValue(char* keyvaluebuf, char* keybuf, char* valuebuf, int* valuebuflen)
{
/*
keyvaluebuf="key4= value4"
keybuf="key4"
*/
if ((keyvaluebuf == NULL) || (keybuf == NULL)
|| (valuebuf == NULL) || (valuebuflen == NULL))
{
return -1;
}
char* p = NULL;
int ret = 0;
//找匹配键值
//在"key4= value4"中找"key4",找到返回首地址
p = strstr(keyvaluebuf, keybuf);
if (p == NULL)
{
return -2;//没找到,则返回
}
//如果找到,重新设置查找起点,跳过“key4”
//p="= value4"
//"key4= value4"->"= value4"
p = p + strlen(keybuf);
//查找"="
//如果找到,重新设置查找起点,跳过“=”
//p=" value4"
//"= value4"->" value4"
p = strstr(keyvaluebuf, "=");
p = p + strlen("=");
//取非空字符
ret = trimspace(p, valuebuf);
if (ret != 0)
{
printf("trimspace error:%d\n", ret);
return ret;
}
//获取长度,通过*间接赋值
*valuebuflen = strlen(valuebuf);
return 0;
}
int main()
{
char* keyVal = "key4= value4";
char* key = "key4";
char* value[100] = { 0 };
int len = 0;
int ret = 0;
ret = getKeyByValue(keyVal, key, value, &len);
if (ret != 0)
{
printf("getKeyByValue error:%d\n", ret);
return ret;
}
printf("Val=%s\n", value);
printf("len=%d\n", len);
printf("\n");
return 0;
}
版权声明:本文为qq_41883732原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。