C语言 字符串中键值查找

  • Post author:
  • Post category:其他


#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 版权协议,转载请附上原文出处链接和本声明。