编程实践使用golang 解析json字符串代码 / 使用 golang 实现一个HashSet / 使用C语言实现KMP算法,并加上非常详尽的注释。
Posted 禅与计算机程序设计艺术
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编程实践使用golang 解析json字符串代码 / 使用 golang 实现一个HashSet / 使用C语言实现KMP算法,并加上非常详尽的注释。相关的知识,希望对你有一定的参考价值。
使用 golang 实现 json 字符串的解析
可以使用 golang 提供的标准库 json 来实现json字符串的解析,具体的实现如下:
package main
import (
"encoding/json"
"fmt"
)
func main()
//一个简单的JSON字符串
jsonstr := `"name": "john", "age": 20`
//定义一个结构体用于解码JSON
type Student struct
Name string
Age int
//使用json.Unmarshal解码JSON
var s Student
json.Unmarshal([]byte(jsonstr), &s)
//使用fmt打印解码后的数据
fmt.Printf("%+v\\n", s)
上述代码的运行结果如下:
Name:john Age:20
使用 golang 实现一个HashSet
代码示例:
//定义HashSet结构体
type HashSet struct
//存储元素的map
items map[interface]struct
//创建新的HashSet对象
func NewHashSet() *HashSet
return &HashSetitems: make(map[interface]struct)
//添加元素
func (set *HashSet) Add(item interface)
set.items[item] = struct
//实现 Contains 方法
func (set *HashSet) Contains(item interface) bool
_, ok := set.items[item]
return ok
//实现 Remove 方法
func (set *HashSet) Remove(item interface)
delete(set.items, item)
使用C语言实现KMP算法,并加上非常详尽的注释。
#include <stdio.h>
#include <string.h>
/************************************************************************/
/*
KMP算法:
核心思想:利用已匹配字符串的信息避免每次都从头开始匹配。
最优时间复杂度:两个字符串中某一个长度为n,其它长度为m,时间复杂度为:O(n+m)
*/
/************************************************************************/
// 计算部分匹配表
void compute_prefix(char* pattern, int prefix[], int n)
prefix[0] = 0;
int len = 0;
int i = 1;
while (i < n)
if (pattern[i] == pattern[len])
len++;
prefix[i] = len;
i++;
else
if (len > 0)
len = prefix[len - 1];
else
prefix[i] = 0;
i++;
// KMP搜索算法
int kmp_search(char* text, char* pattern)
int n = strlen(pattern);
int m = strlen(text);
// 初始化部分匹配表
int* prefix = (int*)malloc(sizeof(int)*n);
compute_prefix(pattern, prefix, n);
// 开始搜索
int i = 0;
int j = 0;
while (i < m)
if (j == n - 1 && text[i] == pattern[j])
return i - j;
if (text[i] == pattern[j])
i++;
j++;
else
if (j > 0)
j = prefix[j - 1];
else
i++;
free(prefix);
return -1;
int main()
char* text = "BBC ABCDAB ABCDABCDABDE";
char* pattern = "ABCDABD";
int pos = kmp_search(text, pattern);
if (pos == -1)
printf("not found!\\n");
else
printf("found at position: %d\\n", pos);
以上是关于编程实践使用golang 解析json字符串代码 / 使用 golang 实现一个HashSet / 使用C语言实现KMP算法,并加上非常详尽的注释。的主要内容,如果未能解决你的问题,请参考以下文章