-
Notifications
You must be signed in to change notification settings - Fork 0
/
content.json
1 lines (1 loc) · 40.9 KB
/
content.json
1
[{"title":"逆波兰表达式","date":"2019-08-19T16:00:00.000Z","path":"2019/08/20/RPN/","text":"逆波兰表达式 逆波兰表达式(Reverse Polish Notation)又叫做后缀表达式。在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之间,这种表示法也称为中缀表示。波兰逻辑学家J.Lukasiewicz于1929年提出了另一种表示表达式的方法,按此方法,每一运算符都置于其运算对象之后,故称为后缀表示。 表达式 逆波兰表达式,它的语法规定,表达式必须以逆波兰表达式的方式给出。逆波兰表达式又叫做后缀表达式。例子: 正常的表达式 逆波兰表达式a+b —> a,b,+a+(b-c) —> a,b,c,-,+a+(b-c)d —> a,b,c,-,d,,+a+d(b-c)—>a,d,b,c,-,,+a=1+3 —> a,1,3,+,= 计算 从左至右扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算,并将结果入栈;重复上述过程直到表达式最右端,最后运算得出的值即为表达式的结果. c语言实现 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556while(c != '#'){ while(isdigit(c)||c=='.') { str[i++] = c; str[i] = '\\0'; if(i>=10) { printf(\"出错,数太大!\\n\"); return -1; } scanf(\"%c\",&c); if(c == ' ') { d = atof(str); push(&s,d); i = 0; break; } } switch( c ) { case '+': pop(&s,&e); pop(&s,&d); push(&s,d+e); break; case '-': pop(&s,&e); pop(&s,&d); push(&s,d-e); break; case '*': pop(&s,&e); pop(&s,&d); push(&s,d*e); break; case '/': pop(&s,&e); pop(&s,&d); if(e != 0) { push(&s,d/e); } else { printf(\"\\n出错:除数为零!\\n\"); return -1; } break; } scanf(\"%c\",&c);}pop(&s,&d);printf(\"%lf\",d); 完整代码 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139#include <stdio.h>#include <stdlib.h>#include <ctype.h>#define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef double ElemType;typedef struct{ ElemType *base; ElemType *top; int stackSize;}sqStack;InitStack(sqStack *s) //初始化栈{ s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof (ElemType)); if (!s->base) exit (0); s->top = s->base; s->stackSize = STACK_INIT_SIZE;}push(sqStack *s,ElemType e) //入栈{ //如果栈空,追加空间 if (s->top - s->base >= s->stackSize ) { s->base = (ElemType *)realloc(s->base,(s->stackSize + STACKINCREMENT) * sizeof(ElemType)); if( !s->base ) exit(0); s->top = s->base + s->stackSize; s->stackSize = s->stackSize + STACKINCREMENT; } *(s->top) = e; s->top++;}ClearStack(sqStack *s) //清空栈{ s->top = s->base;}DestroyStack(sqStack *s) //销毁栈{ int i,len; len = s->stackSize; for(i = 0;i<=len;i++) { free(s->base); s->base++; } s->base = s->top =NULL; s->stackSize = 0;}int StackLen(sqStack s) //返回栈长度{ return(s.top - s.base );}pop(sqStack *s,ElemType *e) //出栈{ if(s->top == s->base ) return 0; *e = *--(s->top);}int main(){ sqStack s; char c; double d,e; char str[10]; int i =0; InitStack(&s); printf(\"请输入表达式 以#结束:\"); scanf(\"%c\",&c); while(c != '#') { while(isdigit(c)||c=='.') { str[i++] = c; str[i] = '\\0'; if(i>=10) { printf(\"出错,数太大!\\n\"); return -1; } scanf(\"%c\",&c); if(c == ' ') { d = atof(str); push(&s,d); i = 0; break; } } switch( c ) { case '+': pop(&s,&e); pop(&s,&d); push(&s,d+e); break; case '-': pop(&s,&e); pop(&s,&d); push(&s,d-e); break; case '*': pop(&s,&e); pop(&s,&d); push(&s,d*e); break; case '/': pop(&s,&e); pop(&s,&d); if(e != 0) { push(&s,d/e); } else { printf(\"\\n出错:除数为零!\\n\"); return -1; } break; } scanf(\"%c\",&c); } pop(&s,&d); printf(\"%lf\",d); return 0;} 下篇将中缀表达式转换成逆波兰表达式 – ©博主原创,转载请注明出处 –"},{"title":"表达式计算","date":"2019-08-19T16:00:00.000Z","path":"2019/08/20/Calculate/","text":"前言在帮忙同学完成数据结构课设题目–表达式计算时,发现直接从+ - * / 优先级入手的话会比较难完成,因此考虑到先把表达式转换成逆波兰表达式,再用计算逆波兰表达式,这样会比较简单。 不清楚逆波兰表达式和如何将中缀表达式转换成逆波兰表达式的同学可以先阅读这两篇博客:逆波兰表达式计算、中缀表达式转换成逆波兰表达式. 波折当我将中缀表达式转换成逆波兰表达式,将逆波兰表达式存放进数组中,再把数组中的逆波兰表达式作为输入计算时,发现这样做的话,代码就有四五百行了。 禀着能简则简的原则,决定对代码进行简化,最终想到是否可以一边转换成逆波兰表达式一边计算呢,也就是转换和计算同时进行。最后发现想法是可行的。代码量从最初的四百多行简化成一百多行。 成果c语言实现 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169/* 将中缀转后缀表达式 和计算后缀表达式 的算法合并 不定义栈结构体 数组代替栈*/#include <stdio.h>#include <stdlib.h>#define STACK_INIT_SIZE 100double Sum(char a,double x,double y) //两个数的计算{ switch( a ) { case '+': return x+y; case '-': return x-y; case '*': return x*y; case '/': if(y != 0) { return x / y; } else { printf(\"\\n出错:除数为零!\\n\"); return -1; } }}int Priority(){ char s1[STACK_INIT_SIZE]; //运算符存入s1 数字存入s2 double s2[STACK_INIT_SIZE]; char c,e; double d,f,sum; char str[10]; int i = 0; int base1,top1,base2,top2; //分别为s1 和 s2 的 栈顶 栈底 base1=top1=base2=top2 = 0; //初始化栈顶 栈底 scanf (\"%c\",&c); while( c != '#') { while(c == ' ') scanf (\"%c\",&c); //如果接收到空格 则继续输入 while((c >= '0' && c <= '9')||c=='.') //筛选数字 { str[i++] = c; str[i] = '\\0'; if(i>=10) { printf(\"出错,数太大!\\n\"); return -1; } scanf (\"%c\",&c); if(!((c >= '0' && c <= '9')||c=='.')) //数字输入结束 { d = atof(str); //字符串转换成浮点类型 s2[top2++] = d; //将数字存入 double型的栈中 i = 0; } } while(c == ' ') scanf (\"%c\",&c); //如果接收到空格 则继续输入 if(')'==c) //如果遇到 ) 则计算 栈中的数据 直到遇到 ( { e = s1[--top1]; //运算符出栈 while('(' != e) { f = s2[--top2]; //将栈中的两个数字 出栈 d = s2[--top2]; sum = Sum(e,d,f); //计算出栈的两个数 s2[top2++] = sum; //将计算结果存入栈中 e = s1[--top1]; //运算符出栈 } } else if('+'==c||'-'==c) //如果遇到 + 或者 - ,就计算栈中的数据 直到运算符栈空 { if( !(top1 - base1)) { s1[top1++] = c; //如果运算符栈中无数据 则运算符入栈 } else //如果运算符栈不为空 则一直计算 { do { e = s1[--top1]; //将栈中的运算符弹出 if('('==e) { s1[top1++] = e; //如果 运算符为 ( 入栈 } else { f = s2[--top2]; //将栈中的两个数字 出栈 d = s2[--top2]; sum = Sum(e,d,f); //计算出栈的两个数 s2[top2++] = sum; //将计算结果存入栈中 } }while(top1 - base1 &&'('!=e); s1[top1++] = c; //运算符入栈 } } else if('*'==c||'/'==c||'('==c) //如果运算符为比较高的 * / 或 ( 就直接入栈等待 { s1[top1++] = c; } else if(c=='#') //遇到 # 说明输入结束 退出循环 { break; } else { printf(\"\\n出错:输入格式错误!\\n\"); return -1; } scanf (\"%c\",&c); } //接受完用户输入的所有字符后 不断将数字弹出栈 计算 直到没有运算符 也就是数字只剩最后一个结果 while(top1 - base1) { e = s1[--top1]; f = s2[--top2]; d = s2[--top2]; sum = Sum(e,d,f); //计算两个数的结果 并将结果压入栈中 s2[top2++] = sum; } d = s2[--top2]; //将最后的结果出栈 if((int)d == d) printf(\"\\n %d\",(int)d); //如果结果为整数就打印整型 如果结果为小数就打印浮点型 else printf(\"\\n %lf\",d); return 0;}int main(){ char x = 'y'; printf(\"请输入算数表达式(支持小数),以#作为结束标志:\\n\"); while(x == 'y') { Priority(); //计算 putchar('\\n'); printf(\"\\n是否继续输入( y / n )? :\"); while((x = getchar()) == '\\n'); //清空缓冲区 while(x != 'y' && x != 'n') { printf(\"\\n是否继续输入( y / n )? :\"); while((x = getchar()) == '\\n'); } while(getchar() != '\\n'); //清空缓冲区 putchar('\\n'); } return 0;} 发现当完成两种算法的合并时,毅然发现表达式计算算法恰好是根据 + - * / 优先实现计算的。 – ©博主原创,转载请注明出处 –"},{"title":"中缀表达式转逆波兰表达式","date":"2019-08-19T16:00:00.000Z","path":"2019/08/20/RNM/","text":"上篇博客逆波兰表达式介绍了逆波兰表达式和如何计算逆波兰表达式,我们知道,用代码实现计算逆波兰表达式是相对于直接计算中缀表达式是比较简单的。但如何每次计算都需要手动转换为逆波兰表达式就比较麻烦,因此这篇博客就是介绍如何将中缀表达式转换为逆波兰表达式。 中缀表达式 中缀表达式是一个通用的算术或逻辑公式表示方法, 操作符是以中缀形式处于操作数的中间(例:3 + 4),中缀表达式是人们常用的算术表示方法。 与前缀表达式(例:+ 3 4)或后缀表达式(例:3 4 +)相比,中缀表达式不容易被计算机解析,但仍被许多程序语言使用,因为它符合人们的普遍用法。 与前缀或后缀记法不同的是,中缀记法中括号是必需的。计算过程中必须用括号将操作符和对应的操作数括起来,用于指示运算的次序。 中缀转逆波兰 初始化两个栈:运算符栈s1和储存中间结果的栈s2; 从左至右扫描中缀表达式; 遇到操作数时,将其压s2; 遇到运算符时,比较其与s1栈顶运算符的优先级: 如果s1为空,或栈顶运算符为左括号“(”,则直接将此运算符入栈; 否则,若优先级比栈顶运算符的高,也将运算符压入s1(注意转换为前缀表达式时是优先级较高或相同,而这里则不包括相同的情况); 否则,将s1栈顶的运算符弹出并压入到s2中,再次转到(4-1)与s1中新的栈顶运算符相比较; 遇到括号时: 如果是左括号“(”,则直接压入s1; 如果是右括号“)”,则依次弹出s1栈顶的运算符,并压入s2,直到遇到左括号为止,此时将这一对括号丢弃; 重复步骤2至5,直到表达式的最右边; 将s1中剩余的运算符依次弹出并压入s2; 依次弹出s2中的元素并输出,结果的逆序即为中缀表达式对应的后缀表达式(转换为前缀表达式时不用逆序) c语言实现123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263while( c != '#') { while(c>='0'&&c<='9') { printf(\"%c\",c); scanf(\"%c\",&c); if(c<'0'||c>'9') printf(\" \"); } if(')'==c) { pop(&s,&e); while('(' != e) { printf(\"%c \",e); pop(&s,&e); } } else if('+'==c||'-'==c) { if( !StackLen(s)) { push(&s,c); } else { do { pop(&s,&e); if('('==e) { push(&s,e); } else { printf(\"%c \",e); } }while(StackLen(s)&&'('!=e); push(&s,c); } } else if('*'==c||'/'==c||'('==c) { push(&s,c); } else if(c=='#') { break; } else { printf(\"\\n出错:输入格式错误!\\n\"); return -1; } scanf (\"%c \",&c);}while(StackLen(s)){ pop(&s,&e); printf(\"%c \",e);} 完整代码 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141#include <stdio.h>#include <stdlib.h>#define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef char ElemType;typedef struct{ ElemType *base; ElemType *top; int stackSize;}sqStack;InitStack(sqStack *s) //初始化栈{ s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof (ElemType)); if (!s->base) exit (0); s->top = s->base; s->stackSize = STACK_INIT_SIZE;}push(sqStack *s,ElemType e) //入栈{ //如果栈空,追加空间 if (s->top - s->base >= s->stackSize ) { s->base = (ElemType *)realloc(s->base,(s->stackSize + STACKINCREMENT) * sizeof(ElemType)); if( !s->base ) exit(0); s->top = s->base + s->stackSize; s->stackSize = s->stackSize + STACKINCREMENT; } *(s->top) = e; s->top++;}ClearStack(sqStack *s) //清空栈{ s->top = s->base;}DestroyStack(sqStack *s) //销毁栈{ int i,len; len = s->stackSize; for(i = 0;i<=len;i++) { free(s->base); s->base++; } s->base = s->top =NULL; s->stackSize = 0;}int StackLen(sqStack s) //返回栈长度{ return(s.top - s.base );}pop(sqStack *s,ElemType *e) //出栈{ if(s->top == s->base ) return ; *e = *--(s->top);}int main(){ sqStack s; char c,e; InitStack(&s); printf(\"请输入中缀表达式,以#作为结束标志:\"); scanf (\"%c\",&c); while( c != '#') { while(c>='0'&&c<='9') { printf(\"%c\",c); scanf(\"%c\",&c); if(c<'0'||c>'9') printf(\" \"); } if(')'==c) { pop(&s,&e); while('(' != e) { printf(\"%c \",e); pop(&s,&e); } } else if('+'==c||'-'==c) { if( !StackLen(s)) { push(&s,c); } else { do { pop(&s,&e); if('('==e) { push(&s,e); } else { printf(\"%c \",e); } }while(StackLen(s)&&'('!=e); push(&s,c); } } else if('*'==c||'/'==c||'('==c) { push(&s,c); } else if(c=='#') { break; } else { printf(\"\\n出错:输入格式错误!\\n\"); return -1; } scanf (\"%c \",&c); } while(StackLen(s)) { pop(&s,&e); printf(\"%c \",e); } return 0;} 下篇计算中缀表达式 – ©博主原创,转载请注明出处 –"},{"title":"解释型C语言","date":"2019-04-22T16:00:00.000Z","path":"2019/04/23/tcc/","text":"无需编译,直接运行C语言源代码文件,将C语言当脚本文件使用。 所需工具:tcc 安装tcctcc介绍:见我上一篇文章 配置最小c语言IDE 下载链接:tcc  提取码:d3q5 解压下载好的压缩包到电脑里的你喜欢放的位置 设置关联键盘win + R 键调出运行窗口,输入regedit打开注册表 进入目录:\\HKEY_CLASSES_ROOT\\.c 修改右侧第一个默认值修改为:tccfile 设置运行命令关联好之后,设置运行命令 在\\HKEY_CLASSES_ROOT目录上右键→新建→项,并命名为tccfile 在刚才所新建的tccfile下新建如图所示的项: 并修改DefaultIcon的默认值,也就是图中箭头所指,此处填的是解压压缩包下的zihe.ico文件的路径,根据自己刚才的解压路径修改。 并在修改command的默认值,如图: (其中用横线画出来的是解压压缩包中tcc.exe文件的路径,根据自己存放位置进行修改) 完成以上操作后,即可关闭注册表。 测试在桌面上或其他地方新建一个以.c为后缀的c文件,会发现文件已经默认关联了图标(如果发现没成功,请根据重新执行上面操作) 我们用文本编辑器打开.c文件,编写C语言代码 编写完成,保存关闭编辑器,直接双击.c文件,即可运行 此后,在本电脑上即可直接运行C语言源代码文件 – ©博主原创,转载请注明出处 –"},{"title":"VIM使用笔记","date":"2019-03-14T16:00:00.000Z","path":"2019/03/15/VIM-note/","text":"vim配置修改vim的配置实现需要对~/.vimrc文件进行修改,下面是我常用的vim配置。注:vimrc的注释符为 “ 常规设置123456789101112131415"设置行号set nu"在上下移动光标时,光标上方或下方保留显示的行数set scrolloff=7"设置tab键set softtabstop=4set tabstop=4"自动缩进set autoindentset cindentset shiftwidth=4"空格进入搜索nnoremap / /\\vvnoremap / /\\v"set foldenable "开始折叠,代码折叠 文件编码设置12345678910111213"文件编码 默认编码为utf-8 ,在fileencoding中加入cp936解决中文乱码问题set encoding=utf-8set fenc=utf-8set fileencodings=ucs-bom,utf-8,cp936"if(g:iswindows==1)" source $VIMRUNTIME/delmenu.vim" source $VIMRUNTIME/menu.vim" language messages zh_CN.utf-8"endifif v:lang =~?'^zh\\|ja\\|ko' set ambiwidth=doubleendifset nobomb 光标设置12345678910111213141516171819202122"关闭方向键,强迫自己用hjklmap <Left> <Nop>map <Right> <Nop>map <Up> <Nop>map <Down> <Nop>"swap 换行显示时,使用hjkl体验更好"同物理行上线直接跳nnoremap k gknnoremap gk knnoremap j gjnnoremap gj j"分配窗口切换时,直接使用ctrl+h/j/k/lmap <C-j> <C-W>jmap <C-k> <C-W>kmap <C-h> <C-W>hmap <C-l> <C-W>l" H 和 L 跳转行首行末noremap H ^noremap L $"鼠标暂不启用set mouse-=a 设置退格键通过源码安装vim的时候,由于vim对vi的兼容,退格键可能会出现不能删除换行符、不能删除之前输入的文本、不能删除tab,,所以需要对退格键进行设置 12"设置退格键 indent:删除缩进字段 eol:删除换行 start:删除此前的输入set backspace=indent,eol,start 状态栏设置vim默认不显示状态栏 需要自己设置 1234567891011121314151617181920212223242526272829"设置标签栏"set showtabline=2"set guioptions-=m " 隐藏菜单栏"set statusline=\\ %<%F[%1*%M%*%n%R%H]%=\\ %y\\ %0(%{&fileformat}\\ %{&encoding}\\ %c:%l/%L%)\\" 设置在状态行显示的信息"set foldcolumn=0"set foldmethod=indent "set foldlevel=3 " 我的状态行显示的内容(包括文件类型和解码)"set statusline=%F%m%r%h%w\\ [FORMAT=%{&ff}]\\ [TYPE=%Y]\\ [POS=%l,%v][%p%%]\\ %{strftime(\\"%d/%m/%y\\ -\\ %H:%M\\")}\\ %{\\"[fenc=\\".(&fenc==\\"\\"?&enc:&fenc).((exists(\\"+bomb\\")\\ &&\\ &bomb)?\\"+\\":\\"\\").\\"]\\"}set statusline=[%F]%y%r%m%*%=%{\\"[fenc=\\".(&fenc==\\"\\"?&enc:&fenc).((exists(\\"+bomb\\")\\ &&\\ &bomb)?\\"+\\":\\"\\").\\"]\\"}\\ [Line:%l/%L,Column:%c][%p%%]" 设置状态行显示常用信息" %F 完整文件路径名" %m 当前缓冲被修改标记" %m 当前缓冲只读标记" %h 帮助缓冲标记" %w 预览缓冲标记" %Y 文件类型" %b ASCII值" %B 十六进制值" %l 行数" %v 列数" %p 当前行数占总行数的的百分比" %L 总行数" %{...} 评估表达式的值"%{"[fenc=".(&fenc==""?&enc:&fenc).((exists("+bomb") && &bomb)?"+":"")."]"} "显示文件编码" %{&ff} 显示文件类型" 总是显示状态行set laststatus=2 高亮设置vim配色方案由于篇幅过大,另写了一篇,看这里:https://yuanspace.top/2019/03/15/VIM-color/"},{"title":"VIM配色方案","date":"2019-03-14T16:00:00.000Z","path":"2019/03/15/VIM-color/","text":"vim配色前言 vim中,主题可以以插件形式存在。其中系统自带的主题存放在$VIMRUNTIME/colors文件夹下,以*.vim命名。(查看$VIMRUNTIME可在vim中执行echo $VIMRUNTIME 命令) 用户自定义的主题一般不存在系统目录下,而是放在当前用户的~/.vim/colors目录下(如果没有此文件夹,自己建一个),这样不会干扰到其他用户 更换vim主题,在~/.vimrc中添加 colorscheme 主题名称 注:也可以不将配色方案作为主题,可直接在~/.vimrc中直接设置 前期工作 开启256颜色支持 在~/.vimrc中添加1set t_Co=256 开启高亮显示关键字 在~/.vimrc中添加12syntax enablesyntax on 使用辅助插件 首先,我们下载一个vim的插件xterm-color-table.vim,这个插件可在vim中查看vim支持的256色。 下载:1git clone https://github.com/guns/xterm-color-table.vim 下载后把xterm-color-table.vim放到目录~/.vim/plugin/下面。或者放到你的全局vim配置文件夹里面。 然后打开vim输入Xt命令就可以看到256种配色了,我们可以照着颜色修改自己喜欢的配置。 如下图: 注:如果打开后,没有显示颜色,显示的全部是数字,需要在你的.bashrc之类的bash环境文件加入export TERM=xterm-256color,让term开启256颜色 定制主题准备好之后,我们就可以开始设置我们的主题了 主题色调主题的整体色调有两种:dark和light 就是暗色调和亮色调 我这里设置的是暗色调1set background=dark 重新设置语法高亮123456if version > 580 hi clear if exists("syntax_on") syntax reset endifendif 主题名称1let g:colors_name="DIY-colors" 基础属性1234567term 黑白终端属性cterm 彩色终端属性ctermfg 彩色终端前景色ctermbg 彩色终端背景色gui GUI属性guifg GUI前景色guibg GUI背景色 在这里我们对于颜色的选择直接用上面的xterm-color-table插件来挑选即可,这样就不需要记各种颜色的单词,直接用256颜色数字代表即可,而且用这个插件也可以直观的看到终端有哪些颜色是支持的,哪些颜色不支持。 配色语法用法举例 12"括号匹配的颜色hi MatchParen ctermbg=232 ctermfg=20 guibg=lightblue 上面这句是设置当光标移动到括号位置的时候,对应相匹配的两个括号就会显示我们设定的颜色。 其中,hi是highlight命令的缩写,用于高亮配置,MatchParen是配色的元素名称,这里是括号匹配,参数形式为 key=value 元素列表状态栏提示信息1234567hi StatusLine 状态栏hi StatusLineNC 非当前窗口的状态栏ErrorMsg 错误信息WarningMsg 警告信息MoreMsg 其他文本Question 访问用户Error 错误 文本搜索12hi IncSearch 增量搜索时hi Search 匹配的文本 弹出菜单这个可以修改YCM自动语法补全弹出的提示框 12Pmenu 弹出菜单PmenuSel 菜单当前选项 窗体边框相关1234567VertSplit 垂直分割窗口的边框LineNr 行号Cursor 光标所在字符CursorLine 光标所在行ColorColumn 光标所在列ColorColumn 标尺NonText 窗口尾部的~和@,以及文本里实际不显示的字符 diff模式1234DiffAdd diff模式增加的行DiffChange diff模式改变的行DiffDelete diff模式删除的行DiffText diff模式插入文本 C/C++语法12345678910Comment 注释PreProc 预处理Type 数据类型Constant 常量Statement 控制语句Special 字符串中的中的特殊字符String 字符串cCppString Cpp字符串Number 数字Todo TODO、HACK、FIXME等标签 其他12345Normal 普通字符SpellBad 拼写错误字符Visual 可视化模式下选中的字符Menu 菜单栏颜色字体Scrollbar 滚动条颜色"},{"title":"Bendizip命令行参数","date":"2019-02-28T16:00:00.000Z","path":"2019/03/01/Bendizip/","text":"bandizip命令行参数Bandizip.exe < archive> Bandizip.exe < command> [< switches>…] < archive> [< files>…] [<path_to_extract>] Bandizip.exe < bcommand> [< switches>…] [< files>…] < archive > 压缩包 执行在设置中指定的操作。 通常只打开压缩包。 < Commands> 命令 a : 添加文件到压缩包 x : 用完整路径解压文件 t : 测试压缩包完整性 d : 删除压缩包中文件 c : 创建新档案(或覆盖现有文件) cd: 显示“新建压缩包”对话框 < BCommands> 批处理命令 bc:要压缩的每个文件/文件夹名称。 若存在相同的压缩包名,则以“文件名(2)”格式创建压缩包。若未指定目标文件夹,则默认目标文件夹为原始文件或文件夹所在的路径。 bx: 将每个压缩包分别解压到目标文件夹中。 若未指定目标文件夹,则默认目标文件夹为每个压缩文件所在的路径。 bt: 测试压缩包 < Switches> 开关 - 停止开关扫描 -l:<0...9> 设置压缩级别(0:存储,5:默认,9:最大) -r- 禁用递归(默认) -r 启用递归子目录 -aoa 无需提示覆盖全部现有文件 -aos 跳过已有文件的解压 -aou 自动重命名解压的文件 (例如,name.txt将被重命名为name (2).txt) -sfx:[{name}] 创建SFX压缩包 -zopfli 使用Zopfli作为默认压缩算法 -p:{password} 设置密码 -o:{dir} 指定目标文件夹 -y 全选“是” -fmt:{fmt} 指定压缩格式 (zip, zipx, exe, tar, tgz, lzh, iso, 7z, gz, xz) -v:{size} 指定分卷大小 (-v:1000000 -v:1440k -v:100MB …) < Switches> (仅针对Banzip) -email 压缩并邮件发送 -target:dlg 显示“目标路径选择”对话框 -target:auto 智能解压到目标路径 -target:name 按压缩包名称解压到目标路径中文件夹下 示例打开压缩包 Bandizip.exe sample.zip 新建压缩包(覆盖已有文件) Bandizip.exe c c:\\sample.zip c:\\src\\Bandizip.exe c c:\\sample.zip c:\\src1\\ c:\\src2\\ 添加文件到压缩包 Bandizip.exe a c:\\sample.zip c:\\src\\sample.txtBandizip.exe a c:\\sample.zip c:\\src\\sample1.txt c:\\src\\sample2.txtBandizip.exe a c:\\sample.zip c:\\src*.txt c:\\src*.jpg 删除压缩包中文件 Bandizip.exe d c:\\sample.zip sample.txtBandizip.exe d c:\\sample.zip *.txt 将压缩包解压到目标路径 Bandizip.exe x -o:c:\\dest\\ c:\\sample.zip 添加文件到压缩包,并设置密码为Passw0rd,无提示覆盖全部已有文件并关闭对话框 Bandizip.exe a -y -p:Passw0rd test.zip c:\\src d:\\src 搬运自官方文档:https://en.bandisoft.com/bandizip/help/parameter/"},{"title":"配置最小c语言IDE","date":"2019-02-09T16:00:00.000Z","path":"2019/02/10/noteCompile/","text":"今天给大家安利两款软件,教大家配置一个最小的C语言开发环境  所需工具:notepad++,tcc notepad++ notepad++是一款windows下的文本编辑器,它是Windows记事本最好的替代工具,小巧且功能强大,目前最新版本也只有5m。由于它小巧、开源、对于不同的编程语言可以实现语法高亮,代码折叠以及宏,起可定制性强的特点,深得广大程序员的喜爱,而且本身完全免费开源,已经成为很多程序员的代码编辑器。 下载链接:https://notepad-plus-plus.org/ Tiny C Compiler Tiny C Compiler(简称TCC, 或Tiny CC)是世界上最小的C语言编译器,而且是开源的, 小到只有约100K。别看它小, 功能还是很强. 可以编译所有C99标准的ANSI C程序 , 支持CPU包括:X86 32或64位, ARM,支持Windows, Linux, OSX。 下载地址:https://download.savannah.gnu.org/releases/tinycc/ 直接解压就能用。 配置环境变量下载安装好上面两款软件后,下一步就是配置环境变量了,配置环境变量是为了在任何地方都可以使用tcc。 把tcc编译器解压到电脑任意目录 右键我的电脑→属性→高级系统设置 环境变量→path→编辑 新建→填写tcc的解压路经   进入tcc的文件夹,点击地址栏复制,那个就是tcc的路径了,我这里是”D:\\Program Files\\yuan Compile” 一路点确定,然后win + R键,键入cmd回车。输入tcc 看到这个就是成功了。如果没有这个,重新弄一遍。 配置notepad++配置好tcc的环境变量之后,接下来要配置notepad++,以便在notepad++中一键编译c程序。 notepad++默认语言是英语,首先把它设置成中文。 然后设置编译运行命令,点击运行,输入以下命令。下面这是两个命令,要分别设置,当然我常用的都是第一个命令,不编译直接运行,要把执行文件发给小伙伴的时候才运行第二个。 不编译直接解释运行c文件: cmd /k tcc -run "$(FULL_CURRENT_PATH)" & PAUSE 编译获得exe可执行文件: cmd /k tcc -Wall "$(FULL_CURRENT_PATH)" -o "$(CURRENT_DIRECTORY)\\$(NAME_PART).exe" & EXIT 填写好命令后,给命令命名然后设置好快捷方式就可以了。每次要运行的时候就按下设置好的快捷键就行了。 然后就是创建c文件写程序保存运行了。 最后如果实在太懒,或者看不懂、配置失败的话,我这里已经打包配置好了,直接下载压缩包,解压直接使用就行了。 打包好的文件: 链接:https://pan.baidu.com/s/15ZUoUGDvidDoTlDqkDHk8Q提取码:14dh – ©博主原创,转载请注明出处 –"},{"title":"java解决程序包不存在问题","date":"2019-02-03T16:00:00.000Z","path":"2019/02/04/JavaPackage/","text":"由于学习C/C++的习惯,不太喜欢用IDE来写代码,所以在学习java的时候,也没有使用教程上的IDE来编写程序。编译java文件也是用命令行编译,所以在学习java中的package的时候遇到程序包 xxx 不存在的问题。 如图: 经过两个小时的不断百度、谷歌、尝试,终于解决了问题,也得出了结论。 我以user.java为自创包内的类,student.java调用user类为例。 user.java 代码如下: 12345public class user{ public int a;} student.java d代码如下123456789public class student{ public static void main(String [] args) { user u = new user(); u.a = 3; System.out.println(u.a); }} 其中user.java在oo包中,studen.java在top包中 我以二种情况说明 当文件目录为下图时: (也就是oo包与student.java在同一目录下时) user.java文件要在前面加上 package oo; 123456package oo;public class user{ public int a;} student.java文件要加上import oo.user;1234567891011import oo.user;public class student{ public static void main(String [] args) { user u = new user(); u.a = 3; System.out.println(u.a); }} 在top目录下编译命令为javac student.java,执行命令为java student 在src目录下编译命令为:javac -cp top top/student.java ,其中-cp 为指定程序包路径 :top,但运行运行的话,要进入top目录,和上面一样的命令运行。在此目录下执行尚未找到解决办法 当文件目录为下图: (即oo包和student.java不在同一目录下时) 文件内容和第一种情况略有不同:user.java文件前面加上 package oo; , student.java文件加上package top;   import oo.user; 1234567891011121314package top;import oo.user;public class student{ public static void main(String [] args) { user u = new user(); u.a = 3; System.out.println(u.a); }} 在top目录下编译命令为javac -cp ../ student.java , 执行:java -cp ../ top.student 在src目录下编译运行: 编译:javac top/student.java    运行 : java top/student – ©博主原创,转载请注明出处 –"},{"title":"windows下命令行编译C/C++","date":"2019-01-27T16:00:00.000Z","path":"2019/01/28/mingw/","text":"下载MingwMinGW,是Minimalist GNU for Windows的缩写。是Windows下的gcc编译器,要想和Linux一样在命令行下编译调试C/C++代码,首先要下载安装mingw。(装有CodeBlocks作为c/c++开发环境的同学,也可以在CodeBlocks安装目录下直接找到mingw,就不需要再次下载了)  首先进入mingw官网:www.mingw.org 右上角download 拉下来左下角 下载完成直接安装就可以了。 设置环境变量下载好mingw之后,接下来设置环境变量 右键我的电脑→属性→高级系统设置 环境变量→path→编辑 新建→填写mingw安装目录下的bin目录   如果默认路径的话是这个:C:\\Program Files\\mingw\\bin 一路点确定,然后win + R键,键入cmd回车。输入gcc -v 看到这个就是成功了。如果没有这个,重新弄一遍。 编译C/C++文件然后我们测试一下C语言文件,以hello.c文件为例。首先在命令行中进入c文件的所在目录,我这里把文件放在桌面,所以是 cd Desktop ,然后输入 gcc hello.c -o hello.exe (如果是cpp文件的话是: g++ hello.cpp -o hello.exe )桌面编译出一个exe可执行文件,然后输入可执行文件名 hello 就可以执行了。操作完成!!熟悉的hello world!就出来了。。 以后编译小型的C/C++文件就不用打开肿胀的IDE了!! – ©博主原创,转载请注明出处 –"},{"title":"Markdown使用教程","date":"2019-01-21T16:00:00.000Z","path":"2019/01/22/markdown/","text":"前言本人第一次接触到.md格式的文件是在github中看到的,之前也不懂得是什么,随着对GitHub的使用逐渐增多,了解到了Markdown,这也算是程序员中最流行的文本格式了,所以自己也学习了一下,个人感觉还是很不错的,以很简单的语法可以构建出简介、美观的文本格式。现整理了一下Markdown的基本语法供大家学习和参考,本文用最终效果和代码语法为大家展示markdown文本如何编写,希望对大家有所帮助。 简介  Markdown是一种轻量级标记语言,它用简洁的语法代替文本排版,让你可以用少量时间而去达到花费大量时间用word文档进行排版一样的效果,如你所看到本篇博客就是用markdown语法编写的。在这我就不对markdown进行详细介绍了,更多详细介绍请点击 → Markdown百度百科。   接下来直接进入正题!! 标题一级标题12# 一级标题‘#’ 后面要加空格 二级标题1## 二级标题 三级标题1### 三级标题 四级标题1#### 四级标题 五级标题1##### 五级标题 六级标题1###### 六级标题 ####### 没有七级标题1####### 没有七级标题 列表 1 2 3 123- 1+ 2* 3 1 2 3 1231. 12. 23. 3 选项和勾选 A B C123- [x] A- [ ] B- [ ] C 引用 例如这样 1>例如这样 鲁迅先生曾经说过:我们目下的当务之急是:一要生存,而要温饱,三要发展。 12>鲁迅先生曾经说过:我们目下的当务之急是:一要生存,而要温饱,三要发展。 斜体、粗体、高亮、划线这是斜体1*这是斜体* 这是粗体1**这是粗体** 这是斜粗体1***这是斜粗体*** 划线1~~划线~~ 分割线 这样 1234---这样---- 代码块1234567#include<stdio.h>int main(){ return 0;} 123456789```c (这个c表示代码格式)#include<stdio.h>int main(){ return 0;}``` (结尾) 或者这样1`或者这样` 还可以直接在前面加Tab键 图片和链接 链接 12345![图片](https://i.postimg.cc/6pPYYqw8/image.jpg)[链接](https://www.yuanspace.top)(说明:括号后面的链接可以是网络链接、本地绝对路径:“C:/photo/photo.jpg”、本地相对路径"./photo.jpg") 表格 Tables Are Cool col 3 is right-aligned $1600 col 2 is centered $12 zebra stripes are neat $1 12345| Tables | Are | Cool || ------------- |:-------------:| -----:|| col 3 is | right-aligned | $1600 || col 2 is | centered | $12 || zebra stripes | are neat | $1 | 扩展文本居中使用html添加: 居中的文本 1<center>居中的文本</center> Markdown工具推荐Windows平台 Markdown Pad Linux平台 ReText Mac平台 Markable.in 浏览器插件 MaDe(chrome)在线编辑器 MdEditor (vscode代码编辑器也是支持markdown语法的、notepad++编辑器也有Markdown语法插件) 以上就是markdown基本常用语法,如需了解更多,请自行查阅markdown语法手册。本次教程就到这里,希望对大家有所帮助。"},{"title":"好用的图床","date":"2019-01-03T16:00:00.000Z","path":"2019/01/04/photospace/","text":"分享一下国内外免费好用的图床简介图床:一般是指储存图片的服务器,就是专门用来存放图片,同时允许你把图片对外连接的网上空间。当然你也可以认为它是网络相册。主要用于个人博客和小型网站。 七牛云官网地址:https://portal.qiniu.com 简介:国内比较著名的网站了,注册认证后有10G永久免费空间,每月10G国内和10G国外流量,速度相当快,七牛云时国内专业CDN服务商,插件支持比较多。提供域名绑定,不过免费用户不支持https,需要花钱购买服务。 SM.MS官网地址:https://sm.ms/ 简介:永久存储免注册,提供多种图片链接格式。图片链接支持https,每个图片限制最大5M,每次最多上传10张。博主目前使用的就是这个。 postimg官网地址:https://postimages.org 简介:国外的图床,永久存储,提供多种图片链接格式。无注册和免费帐户上传的图片仅限于12Mb和10k x 10k像素。高级帐户可上传图片24Mb和10k x 10k像素。图片链接支持https.不过目前外链显示缩略图。 极简图床官网地址:http://jiantuku.com 简介:主要提供图片上传和管理界面。 堆爱外链官网地址:http://pan.duiai.cc/ 简介:免注册,可上传图片音乐视频和压缩文件,不过视频大小有限制。外链不支持https。 小贱贱图床官网地址:http://pic.xiaojianjian.net/ 简介:每日可以上传图片20张,上传后下方会出现外链。不支持https. 爱信息图床官网地址:https://tu.aixinxi.net 简介:需要注册才可使用,永久存储,支持HTTPS加密访问和调用图片,同时也可上传音乐、视频、压缩包、文档等文件。文件大小不大于10M。 又拍云官网地址:https://www.upyun.com 简介:需注册,10G永久免费空间,每月15G流量,链接支持https。 路过图床官网地址:https://imgchr.com 简介:免注册,永久存储,支持https。 最后综合来说,不需要https的推荐七牛云,需要支持https链接的推荐SM.MS图床。"},{"title":"Hello 2019","date":"2018-12-31T16:00:00.000Z","path":"2019/01/01/hello 2019/","text":"告别2018——喜迎2019 2019在今天还是如期到来了,正巧,我的第一个博客也是今天搭建完成,所以第一篇博客当然是要总结一下我那没啥总结的2018和祝愿一下我的2019啦!! 再见!2018 时间很快,转眼2018已经成为昨天,回首过去一年,一个大一小萌新,如今都被舍友戏称为要奔三的老男人了。哈哈!大一一年,告别高中,初来学校,一切都是如此新奇。然而大学生活自由得让人觉得可怕,从此脱离了父母老师的约束、管教。在这一年中,竟没从学校学到什么东西,倒是认识了几个可爱的舍友和一帮友善的同学。过去的这一年,唯一让我感觉有点欣慰的就是C语言了,出于对它的热爱,不断探索、研究,对此自学了一年C语言编程和相关的计算机知识。如今,不说水平多高,起码也是入门了。嗯,2018,也就只有这么多了。再见了,2018! 你好!2019 其实也没啥好写的,希望2019新的一年好吃好睡、健健康康、不挂科,emmmm 当然,没事脱个单也是可以的,哈哈哈哈!!你好!2019。欢迎!!"}]