一道例题
键值对(”key = valude”)字符串,在开发中经常使用;
要求1:请自己定义一个接口,实现根据key获取valude(40分);要求2:编写测试用例(30分);要求3:键值对中间可能有n多空格,请去除空格(30分)。
注意:键值对字符串格式可能如下:
“key1 = valude1”
“key2 = valude2
“key3 = valude3”
“key4 = valude4”
“key5 = “
“key6 = “
“key7 = “
int getKeyByValude(char *keyvaluebuf, char *keybuf, char *valuebuf, int * valuebuflen);
int main()
{
getKeyByValude(“key1 = valude1”, ” key1”, buf, &len);
}
具体解法见,总体代码部分。
项目中代码书写注意总结
1. 每做一次调用,都要先判断它正确不正确,然后,再执行下面的流程,比如,用下面的方式来进行:
if (keyvaluebuf == NULL || keybuf == NULL || valuebuf == NULL)
{
return -1;
}
而不能用:
if (keyvaluebuf && keybuf && valuebuf)
{
return -1;
}
2. 不能采用将函数主体部分放到一个if...else...语句当中。
3. 不能出现过多的缩进情况。
4.调用完函数,立马判断,所以说返回值异常重要,如:
ret = trimSpace1102(p, valuebuf);
if (ret != 0)
{
printf("func getKeyValude() err:%d \n", ret);
return -1;
}
总体代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int trimSpace1102(char *str, char *newstr)
{
char *p = str;
int ncount = 0;
int i, j = 0; //所有的定义都必须写在一块儿。
if (str == NULL && newstr == NULL)
{
printf("func trimSpace() \n");
return -1;
}
i = 0;
j = strlen(p) - 1; //i作为指针指向头部;j作为指针要指向尾部,
//而指向尾部的j是从0开始的,故须减1.
while (isspace(p[i]) && p[i] != '\0')
{
i++;
}
while (isspace(p[j]) && p[j] != '\0')
{
j--;
}
ncount = j - i + 1;
strcpy(newstr, str + i, ncount);
newstr[ncount] = '\0';
return 0;
}
int getKeyByValude(char *keyvaluebuf, char *keybuf, char *valuebuf, int * valuebuflen)
{
char *p = NULL;
int ret = 0;
if (keyvaluebuf == NULL || keybuf == NULL || valuebuf == NULL)
{
return -1;
}
//1. 查找key是不是在母串中
p = keyvaluebuf; //初始化辅助指针变量
p = strstr(p, keybuf);
if (p == NULL)
{
return -1;
}
//让辅助指针变量 重新达到下一次检索的条件
p = p + strlen(keybuf);
//2. 看有没有等号,找到字串
p = strstr(p, "=");
if (p == NULL)
{
return -1;
}
//让辅助指针变量 重新达到下一次检索的条件
p = p + strlen("=");
//3.在等号后面去除空格
ret = trimSpace1102(p, valuebuf);
if (ret != 0)
{
printf("func getKeyValude() err:%d \n", ret);
return -1;
}
return ret;
}
int main()
{
int ret = 0;
int buf[1024] = {0};
int buflen = 0;
char *keyandvalue = "key2 = valude2";
char *key = "key2";
ret = getKeyByValude(keyandvalue, key, buf, &buflen);
if (ret != 0)
{
printf("func getKeyValude() err:%d \n", ret);
return ret;
}
printf("buf:%s\n", buf);
system("pause");
return ret;
}