C小程序—键值对字符串

4.键值对字符串

  • 要求1:求自己定义一个接口,实现根据key获取value
  • 要求2:编写测试用例
  • 要求3:键值对中间可能有n多个空格,求去除空格

如:

"key1= value1";
"key2=      value2    ";
"key3=value3    ";
"key4=      value4";...
  • 1
  • 2
  • 3
  • 4
  • 5

代码

#define  _CRT_SECURE_NO_WARNINGS 
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
/*=====================================
    键值对字符串在开发中经常使用
    要求1:求自己定义一个接口,实现根据key获取value
    要求2:编写测试用例
    要求3: 键值对中间可能有n多个空格,求去除空格
===========================================*/

//去掉字符串前后空格
int trimSpace1(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;


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

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

    strncpy(newstr, str + i, ncount);

    newstr[ncount] = '\0';

    return 0;
}

//根据key获取value
int getValueByKey(char *keyvaluebuf,char *keybuf,char *valuebuf)
{
    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 = trimSpace1(p, valuebuf);
    if (ret != 0)
    {
        printf("func trimSpace1() err:%d \n",ret);
        return ret;
    }

    return 0;
}
int main()
{
    int ret = 0;
    int buf[1024];
    char *keyandvalue = "key2=      value2    ";
    char *key = "key2";
    ret = getValueByKey(keyandvalue,key,buf);
    if (ret != 0)
    {
        printf("func getKeyByValue() err:%d \n",ret);
        return ret;
    }
    printf("buf:%s\n",buf);
    system("pause");

    return ret;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103

运行结果

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用哈希表来实现俩字符串的映射。具体步骤如下: 1. 定义一个哈希表,用来存储对。 2. 遍历第一个字符串中的每一个字符,并将其作为存入哈希表中,为第二个字符串中对应位置的字符。 3. 遍历第二个字符串中的每一个字符,并将其作为存入哈希表中,为第一个字符串中对应位置的字符。 4. 最后遍历哈希表,输出所有的对即可。 下面是示例代码实现: ``` #include <stdio.h> #include <string.h> #define MAX_SIZE 100 int main() { char str1[MAX_SIZE], str2[MAX_SIZE]; int len1, len2, i; char map[MAX_SIZE][2]; printf("请输入第一个字符串:"); fgets(str1, MAX_SIZE, stdin); len1 = strlen(str1) - 1; // 减去末尾的换行符 printf("请输入第二个字符串:"); fgets(str2, MAX_SIZE, stdin); len2 = strlen(str2) - 1; // 减去末尾的换行符 if (len1 != len2) { printf("两个字符串长度不相等,无法映射。\n"); return 0; } for (i = 0; i < len1; i++) { map[i][0] = str1[i]; map[i][1] = str2[i]; } printf("映射结果为:\n"); for (i = 0; i < len1; i++) { printf("%c-%c ", map[i][0], map[i][1]); } printf("\n"); return 0; } ``` 注意:这里使用了 fgets() 函数来读取用户输入的字符串,而不是 scanf() 函数,因为 scanf() 函数会在遇到空格或换行符时停止读取,而 fgets() 函数会读取整个字符串,包括空格和换行符。 ### 回答2: 在Linux C中实现两个字符串的映射,可以使用哈希表来实现。哈希表是一种常用的数据结构,它可以将对以的哈希为索引存储在表中,可以快速地进行查找操作。 首先,我们需要定义一个哈希表的结构体,包括表的大小、存储数据的数组和一个哈希函数。 ```c #define TABLE_SIZE 1000 typedef struct { char* key; char* value; } KeyValuePair; typedef struct { int size; KeyValuePair table[TABLE_SIZE]; } HashMap; ``` 然后,我们需要实现一个哈希函数,它能够将字符串映射到哈希表中的对应位置。 ```c int hash(char* str) { unsigned long hash = 5381; int c; while ((c = *str++)) { hash = ((hash << 5) + hash) + c; } return hash % TABLE_SIZE; } ``` 接下来,我们可以实现向哈希表中插入对和查找对应的的函数。 ```c void insert(HashMap* map, char* key, char* value) { int index = hash(key); KeyValuePair* pair = &map->table[index]; pair->key = strdup(key); pair->value = strdup(value); } char* getValue(HashMap* map, char* key) { int index = hash(key); KeyValuePair* pair = &map->table[index]; if (pair->key != NULL && strcmp(pair->key, key) == 0) { return pair->value; } return NULL; } ``` 最后,我们可以通过调用这些函数来实现字符串的映射。 ```c int main() { HashMap map; map.size = TABLE_SIZE; insert(&map, "apple", "苹果"); insert(&map, "banana", "香蕉"); char* value = getValue(&map, "apple"); if (value != NULL) { printf("%s\n", value); // 输出:苹果 } value = getValue(&map, "grape"); if (value != NULL) { printf("%s\n", value); } else { printf("没有找到对应的映射\n"); // 输出:没有找到对应的映射 } return 0; } ``` 通过以上的代码,我们可以快速地在Linux C中实现俩字符串的映射,并且能够在需要时快速地获取对应的映射。 ### 回答3: 在Linux的C语言中实现俩字符串的映射可以使用哈希表来存储对。哈希表是一种高效的数据结构,可以通过哈希函数将字符串转换成唯一的索引,在常数时间内查找和插入操作。 首先,我们需要定义一个哈希表的结构体,包含两个成员:数组和数组长度。数组的每个元素是一个链表,用来解决哈希冲突问题。 接下来,我们需要实现哈希函数,将字符串转换成哈希表的索引。一个简单的哈希函数是将字符串的ASCII码相加,然后取余操作来得到索引。 然后,我们需要实现插入操作。通过哈希函数计算出索引后,将对插入到对应的链表中。如果链表中已经存在相同的,则更新该对应的。 最后,我们可以实现查找操作。同样通过哈希函数计算出索引后,遍历链表,找到对应的对。如果找到了对应的,则返回对应的,否则返回空。 通过以上的步骤,我们就可以在Linux的C语言中实现俩字符串的映射。使用哈希表可以高效地进行插入和查找操作,提高程序的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值