【C语言提高21】关于字符串的一个例题

本文介绍了一个用于解析键值对(key-value)字符串的方法,并实现了去除字符串前后空格的功能。通过定义接口来获取键对应的值,同时编写了测试用例验证功能的正确性。
<span style="background-color: rgb(255, 255, 255);"><span style="color:#009900;">//*********************************************************//
//键值对(”key = valude”)字符串,在开发中经常使用;
//要求1:请自己定义一个接口,实现根据key获取valude;40分
//要求2:编写测试用例。30分
//要求3:键值对中间可能有n多空格,请去除空格30分
//注意:键值对字符串格式可能如下:
//“key1 = valude1”
//“key2 = valude2
//“key3 = valude3”   
//“key4 = valude4”
//“key5 = “
//“key6 = “
//“key7 = “
//*********************************************************//</span></span>



#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<ctype.h>

//去除字符串的前后空格
int trimSpace(char*str/*in*/,char*newstr/*in*/)
{
	char* p = str;
	int count = 0;
	if (str == NULL || newstr == NULL)
	{
		return 0;
	}

	int i = 0;

	int j = strlen(p) - 1;


	while (isspace(p[i]) && p[i] != '\0')
	{
		i++;
	}
	while (isspace(p[j]) && p[j] != '\0')
	{
		j--;
	}

	count = j - i + 1;//7-1+1

	strncpy(newstr,str+i,count);//从str的第i个开始  拷贝count个字符
        //newstr后面手工补0
	newstr[count] = '\0';
	
	return 1;
}

                //母串                  //字串                           
int getKeyByValue(char*keyvaluebuf/*in*/, char*keybuf/*in*/)
{
	char*p = NULL;
	if (keyvaluebuf == NULL || keybuf == NULL)
	{
		printf("err");
		return -1;
	}

	//1 查找子串key是不是在母串中
	
	//初始化辅助指针变量
	p = keyvaluebuf; 
	
	p=strstr(p,keybuf);//返回str2在str1中首次出现的地址
	if (p == NULL)
	{
		return -1;
	}

	//让辅助指针变量 重新达到下一次检索的条件
	p = p + strlen(keybuf);//p指向:"=       value2  "


	//2 有没有=号
	p = strstr(p,"=");
	if (p == NULL)
	{
		return -1;
	}
	//让辅助指针变量 重新达到下一次检索的条件
	p = p + strlen("=");  //p指向:"       value2  "

	//3 在等号后面去除空格

	int ret = trimSpace(p, keybuf);
	if (ret != 0)
	{
		printf("fun trim err");
		return ret;
	}
	return 0;
}

int main()
{
	int ret = 0;
	char*keyandvalue = "key2 =       value2  ";
	char*        key = "key2";
        ret=getKeyByValue(keyandvalue,key);
	if (ret != 0)
	{
		printf("fun getKeyByValue err:%d",ret);
		return ret;
	}
	printf("buf is %s",key);
	system("pause");
	return 0;
}

### C语言字符串函数示例代码 #### 反转字符串函数实现 为了满足需求,下面展示了一个用于反转字符串的函数 `reverse_string` 的具体实现方法。此函数接收一个字符数组作为参数,并将其内容替换为其逆序版本。 ```c #include <stdio.h> #include <string.h> void reverse_string(char *str) { int length = strlen(str); for (int i = 0; i < length / 2; ++i) { char temp = str[i]; str[i] = str[length - i - 1] = temp; } } int main() { char input[100]; printf("请输入要反转的字符串:\n"); fgets(input, sizeof(input), stdin); // 去除可能存在的换行符 size_t len = strlen(input); if (len > 0 && input[len - 1] == '\n') { input[--len] = '\0'; } reverse_string(input); printf("反转后的字符串为:%s\n", input); return 0; } ``` 这段代码实现了用户交互功能,允许通过命令行输入待处理的数据[^1]。 #### 计算字符串长度函数解释 另一个常见的操作是对给定的字符串计算其实际长度。这里给出了一段简单的代码片段来完成这一任务: ```c int string_length(const char *s){ const char *t = s; while (*t++); return t - s - 1; } ``` 上述代码定义了一个名为 `string_length` 的整型返回值函数,它接受指向常量字符类型的指针作为参数。内部逻辑遍历整个字符串直到遇到终止零字节(`\0`)为止,最终返回有效字符的数量[^2]。 #### 追加字符串至目标缓冲区 当涉及到将源字符串附加到目的地址时,则可以利用标准库提供的 `strcat()` 函数来进行高效的操作。以下是具体的调用方式以及注意事项说明: ```c char destination[50] = "Hello "; const char source[] = "World!"; // 确保destination有足够的空间容纳source的内容加上原有的数据再加上结尾'\0' if(strlen(destination)+strlen(source)<sizeof(destination)){ strcat(destination, source); }else{ puts("Error: Not enough space!"); } printf("%s\n", destination); // 输出 Hello World! ``` 需要注意的是,在执行拼接之前应当先验证目的地是否有足够的剩余容量以防止溢出风险[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值