Record17—函数集成和项目开发中代码的正确写法

一道例题

键值对(”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;

}
发布了140 篇原创文章 · 获赞 6 · 访问量 4869

猜你喜欢

转载自blog.csdn.net/qq_17846375/article/details/103694034