博客第一文,附hugo表格的坑

第一次使用这个hugo就遇到一堆坑,主题并不是随便用,会有SHA-256校验,而在windows平台下用git,clone下来会把\n自动换成\r\n从而导致主题应用失败,服了。

另一个坑就是hugo的表格,你不能像以下这么写

a|b|c
-|-|-
1|2|3

这样hugo的引擎是不认为这是表格,正确的做法是改成下面这样

a  | b | c
---|---|---
1  | 2 | 3

显示结果就是这样

a b c
1 2 3

区别是什么呢?在表格的第二行是---|---|---,这一行是用来描述对齐方式的,不过hugo的引擎要求每列至少3个字符,所以刚好3个字符时只能是

---
:--
--:
:-:

中四选一,任何一个只剩下两个字符就不算是表格。

本博客计划是发布我的研究成果,当然主要是算法方面,而且主要是网上不会轻易搜索到的东西。

更多的东西可以关注我的 Github 账号

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
 
int g_eof;
int get_lv(char c) {
	return !(c == '+' || c == '-');
}
 
double get_val(double v[], char op) {
	if (op == '+') return v[0] + v[1];
	if (op == '-') return v[0] - v[1];
	if (op == '*') return v[0] * v[1];
	if (op == '/') return v[0] / v[1];
	return v[0];
}
 
double calc(char* op, int level, double val, char o, int i) {
	char c[2] = { o };
	double v[2] = { val };
	if ((g_eof = scanf("%lf", &v[i])) != EOF)
		scanf("%c", &c[i]);
	if (c[i] == '(') {
		v[i] = calc(&c[i], 0, 0, 0, 0);
		scanf("%c", &c[i]);
	}
	if (i > 0) {
		if (!(c[i] == '\n' || c[i] == ')'
			|| get_lv(c[0]) >= get_lv(c[1])))
			v[i] = calc(&c[1], get_lv(c[1]), v[1], c[1], get_lv(c[1]) > 0);
		v[0] = get_val(v, c[0]);
		c[0] = c[1];
	}
	if (c[0] == '\n' || c[0] == ')' || get_lv(c[0]) < level) {
		*op = c[0];
		return v[0];
	}
	return calc(op, level, v[0], c[0], 1);
}
 
int main(void) {
	char op;
	while (g_eof != EOF)
		printf("= %.15g\n", calc(&op, 0, 0, '\n', 0));
	return 0;
}
Avatar
抱抱熊

一个喜欢折腾和研究算法的大学生

comments powered by Disqus