编程实践使用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算法,并加上非常详尽的注释。的主要内容,如果未能解决你的问题,请参考以下文章

golang 兼容不同json结构体解析实践

golang编程实践总结

编程实践Golang 字符串数组排序

go语言json处理

golang——json的html标签转义问题

golang生成JSON及解析JSON