正则表达式 为什么会输出小括号呢?

正则表达式 为什么会输出小括号呢? 哪位大哥知道怎么可以去掉吗?

2个回答

没有代码,没有正则表达式,这个无法判断。

如果你希望匹配小括号,需要转义

\(.*\)

如果你希望去掉括号,可以用

[^\(\)]+

()小括号是分组的意思,组又分为捕获组和非捕获组,捕获组会缓存捕获到的内容到内存,效率相对较低
m.nekeji.com

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
求助,今天就要截至的作业,求大佬解答。
一: 如果通过插入“ +”和“ 1”可以从中得到格式正确的数学表达式,则将带括号的序列称为正确的。 例如,序列 "(())()","()"和 "(()(()))"是正确的,而")(","(()))("和"(()" 不是。 定义重新排序操作:选择括号序列的任意连续子段(子字符串),然后以任意方式对其中的所有字符进行重新排序。 当重新排序的子段的长度为t时,重新排序操作需要耗时t秒。 例如,对于“))((”,他可以选择子字符串“)(”并重新排序“)()(”(此操作将花费2秒)。 不难看出,重新排序操作不会改变左括号和右括号的数量。 现在,LD想花费最少的时间,通过任意次数(可能为零)执行重新排序操作来使括号序列变成正确的。 输入格式: 第一行包含一个整数n(1≤n≤1e6),表示序列的长度; 第二行包含一个长度为n的字符串,仅由字符‘(’和‘)’组成。 输出格式: 输出一个整数,表示使括号序列正确的最小秒数;如果不可能实现,则输出-1。 输入样例: 8 ))((())( 输出样例: 6 二: 有N堆石子,每堆石子有若干石头,所有石头的总数是N的倍数。 可以在任意一堆上取若干石头,进行移动。移动规则是:在第一堆上取的石子,只能移到第二堆;在第N堆上取的石子,只能移到N-1堆;其他堆上取的,可以移到相邻左边或者右边。如何用最少的移动次数使得每堆石子的数量一样多呢? 当N=4时,4堆石子数为:9、8、17、6 移动3次可以使4堆数目一样多: 从第3堆取4个石子放到第4堆(9、8、13、10) 从第3堆取3个放到第2堆(9、11、10、10) 从第2堆取1个放到第1堆(10、10、10、10) 输入格式: 第一行包含一个整数N(1<= N <=100),表示有N堆石子; 接着有N行,每行一个整数ai(1<= ai <=10000),表示第i堆石子的数量。 输出格式: 输出一个整数,表示使所有石子堆的石子均达到相等时需要的最少移动次数。 输入样例: 4 9 8 17 6 输出样例: 3
新手求帮助,感谢各位大佬。
如果通过插入“ +”和“ 1”可以从中得到格式正确的数学表达式,则将带括号的序列称为正确的。 例如,序列 "(())()","()"和 "(()(()))"是正确的,而")(","(()))("和"(()" 不是。 定义重新排序操作:选择括号序列的任意连续子段(子字符串),然后以任意方式对其中的所有字符进行重新排序。 当重新排序的子段的长度为t时,重新排序操作需要耗时t秒。 例如,对于“))((”,他可以选择子字符串“)(”并重新排序“)()(”(此操作将花费2秒)。 不难看出,重新排序操作不会改变左括号和右括号的数量。 现在,LD想花费最少的时间,通过任意次数(可能为零)执行重新排序操作来使括号序列变成正确的。 输入格式: 第一行包含一个整数n(1≤n≤1e6),表示序列的长度; 第二行包含一个长度为n的字符串,仅由字符‘(’和‘)’组成。 输出格式: 输出一个整数,表示使括号序列正确的最小秒数;如果不可能实现,则输出-1。 输入样例: 8 ))((())( 输出样例: 6
小白完全不会,求大佬指点。
一: 如果通过插入“ +”和“ 1”可以从中得到格式正确的数学表达式,则将带括号的序列称为正确的。 例如,序列 "(())()","()"和 "(()(()))"是正确的,而")(","(()))("和"(()" 不是。 定义重新排序操作:选择括号序列的任意连续子段(子字符串),然后以任意方式对其中的所有字符进行重新排序。当重新排序的子段的长度为t时,重新排序操作需要耗时t秒。 例如,对于“))((”,他可以选择子字符串“)(”并重新排序“)()(”(此操作将花费2秒)。 不难看出,重新排序操作不会改变左括号和右括号的数量。 现在,LD想花费最少的时间,通过任意次数(可能为零)执行重新排序操作来使括号序列变成正确的。 输入格式: 1.第一行包含一个整数n(1≤n≤1e6),表示序列的长度; 2.第二行包含一个长度为n的字符串,仅由字符‘(’和‘)’组成。 输出格式: 输出一个整数,表示使括号序列正确的最小秒数;如果不可能实现,则输出-1。 输入样例: 8 ))((())( 输出样例: 6 二: 给出一串包含 ( 、 ) 、[ 和 ] 的字符串,字符串在以下三种情况下为合法的: 1 字符串为空; 2 如果A和B都是合法的,那么AB也是合法的; 3 如果A是合法的,那么(A)和[A]也是合法的。 试判断输入的字符串是否合法。 输入格式: 输入包括一串由若干个 ( 、 ) 、 [ 或 ] 组成的字符串,字符串长度不超过100。 输出格式: 如果该字符串合法,输出“Yes”;否则输出“No”。 输入样例: ([]) 输出样例: Yes
OpenJudge一类括号匹配问题
总时间限制: 1000ms 内存限制: 65536kB 描述 在程序设计中,常常使用小括号强调表达式的运算顺序,但是,左右小括号必须匹配。现给定一个不多于500个符号的表达式(串),其中可能存在多个小括号,想检查小括号的匹配问题。如果存在小括号不匹配,则输出 mismatch;如果所有小括号匹配,则按左右括号的匹配距离由小到大输出左、右括号的位置;若多个匹配的距离相等,则左括号先出现的匹配先输出;如果整个串中没有小括号,则左右位置均输出0,即 0,0; ,规定,串中第一个符号的位置为1。 匹配距离=右括号位置 - 左括号位置。 例如: 输入为: (x+y*(z-5)*(x+y))*(x+98) 输出为: 6,10 12,16 19,24 1,17 如果输入为 (x+y*(z-5))*x+y) 则不匹配,因为在最后的反括号没有相匹配的正括号。因此,输出: mismatch 输入 一串符号 输出 按匹配距离的增序输出匹配对的左右位置,逗号间隔;如果距离相同,则按左括号出现的先后顺序输出;如果整个序列中出现不匹配现象,则输出 mismatch; 样例输入 (x+y*(z-5)*(x+y))*(x+98) 样例输出 6,10 12,16 19,24 1,17
数据结构题目,四则运算
用户从键盘输入一个计算表达式,用栈实现四则运算。表达式中含有数字,加减乘除,小括号。输出表达式的结果。用c语言实现
如何用二叉树构造一个前缀表达式,用递归算法
我做的实验是一个表达式二叉树,声明Operators运算符集合类,提供运算符及其优先级,按优先级比较运算符大小的函数,两个操作数进行指定运算的函数等。 声明ExpressionBinaryTree表达式二叉树类(教材图6.11)如下,继承BinaryTree<MyString>二叉树类,实现以下函数功能。 //输出带括号的中缀表达式,算法必须比较运算符优先级的大小 ostream& operator<<(ostream& out, BinaryTree<MyString> &exptree) int toValue() //计算算术表达式,设操作数类型是整数,返回整数 void createByPrefix(MyString &prefix) //以前缀表达式prefix构造,递归算法 我该怎么写,能给我个思路吗?
使用双栈实现中缀表达式求值一个字符栈一个数字栈
程序写好没输出啊,急求啊......主要BUG 在Nibolansuanfa()这个自定义函数里面前面的可以忽略..... /*核心函数*/ double Nibolansuanfa(char *str,stack *s) { initstack(&s);//初始化栈 char st[20],tc,xy;//st[20]里面放数字字符串 int j=0,i=0,yxcount=0; double d; while(str[j]!='\0') { /*数字字符拷贝*/ if(Isnum(str[i])) { while(Isnum(str[i])) { st[i]=str[j];//将数字字符串放到st数组 i++; j++; } /*数字字符转换并进数字栈*/ i=0; d=atof(st); pushdb(s,d); st[20]=0; continue; } /*非数字字符进字符栈*/ else if(!IsRxz(str[j])&&!Isnum(str[j])) { pushchar(s,str[j]); j++; } else if(Isysf(str[j])) { tc=popchar(s); pushchar(s,tc); Cmpysf(str[j],tc); if(Cmpysf(str[j],tc)) YsStackdb(str[j],s); else pushchar(s,str[j]); j++; } else if(IsRxz(str[j]))//遇到右限制处理 { if(str[j]==')')//遇到小括号 while((tc=popchar(s))!='(') { if(Isysf(tc)) { xy=popchar(s); pushchar(s,xy); if(Isysf(xy)) { if(Cmpysf(tc,xy)) YsStackdb(tc,s); else pushchar(s,tc); } j++; } else { printf("中缀表达式格式错误!"); exit(0); } } if(str[j]==']')//遇到中括号 while((tc=popchar(s))!='[') { if(Isysf(tc)) { xy=popchar(s); pushchar(s,xy); if(Isysf(xy)) { if(Cmpysf(tc,xy)) YsStackdb(tc,s); else pushchar(s,tc); } j++; } else { printf("中缀表达式格式错误!"); exit(0); } } if(str[j]=='}')//遇到大括号 while((tc=popchar(s))!='{') { if(Isysf(tc)) { xy=popchar(s); pushchar(s,xy); if(Isysf(xy)) { if(Cmpysf(tc,xy)) YsStackdb(tc,s); else pushchar(s,tc); } j++; } else { printf("中缀表达式格式错误!"); exit(0); } } } else { printf("中缀表达式格式错误!"); exit(0); } } if(--(s->topdb)==s->bottomdb) return popdb(s); else return 0; } /*全部完整程序*/ #include<stdio.h> #include<math.h> #include<stdlib.h> #include<ctype.h> #define STACKSIZE 100 #define STACKADD 10 /*运算符优先级数据结构*/ struct Yxsz { char ysf; int yxj; } ysz[]={{'(',6},{')',0},{'[',6},{']',1},{'{',6},{'}',2},{'#',3},{'^',3},{'*',4},{'/',4},{'+',5},{'-',5}}; /*char类型与double类型的双栈结构*/ typedef struct { char *topchar; char *bottomchar; int charStackSize; double *topdb; double *bottomdb; int doubleStackSize; }stack; /*初始化栈*/ void initstack(stack *s) { s->bottomchar=(char*)malloc(STACKSIZE*sizeof(char)); if(!s->bottomchar) exit(0); s->topchar=s->bottomchar; s->charStackSize=STACKSIZE; s->bottomdb=(double *)malloc(STACKSIZE*sizeof(double)); if(!s->bottomdb) exit(0); s->topdb=s->bottomdb; s->doubleStackSize=STACKSIZE; } /*字符入栈*/ void pushchar(stack *s,char a) { if(s->topchar-s->bottomchar>=STACKSIZE) { s->bottomchar=(char*)realloc(s->bottomchar,(s->charStackSize+STACKADD)*sizeof(char)); if(!s->bottomchar) exit(0); } *(s->topchar)=a; s->topchar++; } /*数字入栈*/ void pushdb(stack *s,double b) { if(s->topdb-s->bottomdb>=STACKSIZE) { s->bottomdb=(double *)realloc(s->bottomdb,(s->doubleStackSize+STACKADD)*sizeof(double)); if(!s->bottomdb) exit(0); } *(s->topdb)=b; s->topdb++; } /*字符出栈*/ char popchar(stack *s) { char i; if(!s&&s->topchar==s->bottomchar) exit(0); i=*(--s->topchar); return i; } /*数字出栈*/ double popdb(stack *s) { double i; if(!s&&s->topdb==s->bottomdb) exit(0); i=*(--s->topdb); return i; } /*清空栈*/ int Cealenstack(stack *s) { if(!s) return 0; s->topchar=s->bottomchar; s->topdb=s->bottomdb; return 1; } /*销毁栈*/ void Destorystack(stack *s) { int lenchar=stackcharLen(s),lendb=stackdblen(s); if(!s) exit(0); while(lenchar) { *(--s->topchar)=NULL; lenchar--; } while(lendb) { *(--s->topdb)=0; lendb--; } } /*计算字符栈长度*/ int stackcharLen(stack *s) { return(s->topchar-s->bottomchar); } /*计算数字栈长度*/ int stackdblen(stack *s) { return (s->topdb-s->bottomdb); } /*以下为程序核心*/ /*将中缀字符串转换成后缀然后求值这个函数有点复杂,定义在主函数下面*/ double Nibolansuanfa(char *str,stack *s); /*字符是右限制符号*/ int IsRxz(char i) { if(i==')'||i==']'||i=='}') return 1; else return 0; } /*字符是运算符*/ int Isysf(char i) { if(i=='*'||i=='/'||i=='^'||i=='#'||i=='+'||i=='-') return 1; else return 0; } /*字符是数字字符*/ int Isnum(char i) { if(i>='0'&&i<='9'||i=='.') return 1; else return 0; } /*比较栈里上下两个运算符的优先级如果前一个优先级比后一个大或者同级返回前一个字符,别的返回0*/ char Cmpysf(char a,char b) { int j=0,i=0; while(ysz[j].ysf!=a) j++; while(ysz[i].ysf!=b) i++; if(ysz[j].yxj<=ysz[i].yxj) return a; else return 0; } /*遇到运算符直接在数字栈里面处理并计算*/ void YsStackdb(char i,stack *s) { int k,j; switch(i) { case '#': k=popdb(s); j=popdb(s); pushdb(s,pow(j,1.0/k)); break; case '^': k=popdb(s); j=popdb(s); pushdb(s,pow(j,k)); break; case'*': k=popdb(s); j=popdb(s); pushdb(s,j*k); break; case'/': k=popdb(s); j=popdb(s); pushdb(s,j/k); break; case'+': k=popdb(s); j=popdb(s); pushdb(s,j+k); break; case'-': k=popdb(s); j=popdb(s); pushdb(s,j-k); break; } return; } /*主函数*/ int main(void) { stack *sk; char str[100]; printf("请输入一个中缀表达式:"); scanf("%s",str); printf("结果:%lf\n",Nibolansuanfa(str,sk)); return 0; } /*核心函数*/ double Nibolansuanfa(char *str,stack *s) { initstack(&s);//初始化栈 char st[20],tc,xy;//st[20]里面放数字字符串 int j=0,i=0,yxcount=0; double d; while(str[j]!='\0') { /*数字字符拷贝*/ if(Isnum(str[i])) { while(Isnum(str[i])) { st[i]=str[j];//将数字字符串放到st数组 i++; j++; } /*数字字符转换并进数字栈*/ i=0; d=atof(st); pushdb(s,d); st[20]=0; continue; } /*非数字字符进字符栈*/ else if(!IsRxz(str[j])&&!Isnum(str[j])) { pushchar(s,str[j]); j++; } else if(Isysf(str[j])) { tc=popchar(s); pushchar(s,tc); Cmpysf(str[j],tc); if(Cmpysf(str[j],tc)) YsStackdb(str[j],s); else pushchar(s,str[j]); j++; } else if(IsRxz(str[j]))//遇到右限制处理 { if(str[j]==')')//遇到小括号 while((tc=popchar(s))!='(') { if(Isysf(tc)) { xy=popchar(s); pushchar(s,xy); if(Isysf(xy)) { if(Cmpysf(tc,xy)) YsStackdb(tc,s); else pushchar(s,tc); } j++; } else { printf("中缀表达式格式错误!"); exit(0); } } if(str[j]==']')//遇到中括号 while((tc=popchar(s))!='[') { if(Isysf(tc)) { xy=popchar(s); pushchar(s,xy); if(Isysf(xy)) { if(Cmpysf(tc,xy)) YsStackdb(tc,s); else pushchar(s,tc); } j++; } else { printf("中缀表达式格式错误!"); exit(0); } } if(str[j]=='}')//遇到大括号 while((tc=popchar(s))!='{') { if(Isysf(tc)) { xy=popchar(s); pushchar(s,xy); if(Isysf(xy)) { if(Cmpysf(tc,xy)) YsStackdb(tc,s); else pushchar(s,tc); } j++; } else { printf("中缀表达式格式错误!"); exit(0); } } } else { printf("中缀表达式格式错误!"); exit(0); } } if(--(s->topdb)==s->bottomdb) return popdb(s); else return 0; }
c语言数据结构 表达式求值
**目的:1)掌握栈的概念与基本操作; 2)掌握文本文件的读写操作。 要求:实现任意加、减、乘、除与括号的表达式求值; 输入输出格式要求如下: 输入文件input.txt内容: 2*(4-100)= 3*5+9/3= 100-20*(4*6/3)= 输出文件output.txt内容(output.txt文件为自动生成,若已存在则覆盖): 2*(4-100)=-192 3*5+9/3=18 100-20*(4*6/3)=-60** 求大神帮帮咯 代码如下,就是不会写文件那部分: #include <stdio.h> #include <stdlib.h> #define MAX 20 //定义第一个栈---作为存放运算数的操作符 struct SNode_Num { int datas[MAX]; int top; }; typedef struct SNode_Num OperateNum; //定义第二个栈---作为存放运算符号的栈 struct SNode_Symbol { char symbol[MAX]; int top; }; typedef struct SNode_Symbol OperateSymbol; /******************************************************************** 描述:定义函数:InitOperandNum,并且初始化运算数栈顶 参数:OperateNum *StackNum 返回值:void ********************************************************************/ void InitOperateNum(OperateNum *StackNum) { StackNum->top = -1; } /******************************************************************** 描述:定义函数: InitOperateSymbol,并且初始化运算符栈顶 参数:OperateSymbol *StackSymbol 返回值:void ********************************************************************/ void InitOperateSymbol(OperateSymbol *StackSymbol) { StackSymbol->top = -1; } /******************************************************************** 描述:定义函数:PushOperateNum, 压一个数到栈顶 参数:OperateNum *StackNum, int x 返回值:void ********************************************************************/ void PushOperateNum(OperateNum *StackNum, int x) { StackNum->top++; StackNum->datas[StackNum->top] = x; } /******************************************************************** 描述:定义函数:PushOperateSymbol,压一个运算符到栈顶 参数:OperateSymbol *StackSymbol, char ch 返回值:void ********************************************************************/ void PushOperateSymbol(OperateSymbol *StackSymbol, char ch) { StackSymbol->top++; StackSymbol->symbol[StackSymbol->top] = ch; } /******************************************************************** 描述:定义函数:PopOperateNum,将运算数从栈中读取出来 参数:OperateNum *StackNum 返回值:返回取出来的数 ********************************************************************/ int PopOperateNum(OperateNum *StackNum) { int num; num = StackNum->datas[StackNum->top]; StackNum->top--; return num; } /******************************************************************** 描述:定义函数:PopOperateSymbol,将运算符从栈中取出来 参数:OperateSymbol *StackSymbol 返回值:返回取出来的符号 ********************************************************************/ char PopOperateSymbol(OperateSymbol *StackSymbol) { char ch; ch = StackSymbol->symbol[StackSymbol->top]; StackSymbol->top--; return ch; } //取出相应的数 int GetOperateNum(OperateNum *StackNum) { return StackNum->datas[StackNum->top]; } //取出相应运算符 char GetOperateSymbol(OperateSymbol *StackSymbol) { return StackSymbol->symbol[StackSymbol->top]; } /******************************************************************** 描述:定义函数, IsOperateSymbolOrNum,判断输入的符号是那些符号 参数:char ch 返回值:有符号返回1,无符号返回0 ********************************************************************/ short IsOperateSymbolOrNum(char ch) { //判断所有需要用的操作符 包括 + - * / ( ) \n if(ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '(' || ch == ')' || ch == '\n') return 1; else return 0; } /******************************************************************** 描述:定义函数: Priority,用于判断符号优先级运算 参数:char inputnum, char ch 返回值:符号的大小的字符 ********************************************************************/ char Priority(char inputnum, char ch) { switch(inputnum) { //加减在同一个优先级上 case '+': case '-': { if(ch == '+' || ch == '-') return '>'; else if(ch == '*' || ch == '/') return '<'; else if(ch == '(') return '<'; else if(ch == ')') return '>'; else return '>'; } break; //乘除在同一优先级 case '*': case '/': { if(ch == '+' || ch == '-') return '>'; else if(ch == '*' || ch == '/') return '>'; else if(ch == '(') return '<'; else if(ch == ')') return '>'; else return '>'; } break; //括号在所有优先级以上 case '(': { if(ch == ')') return '='; else return '<'; } break; case ')': { return '>'; } break; case '\n': { if(ch == '\n') return '='; else return '<'; } break; } } /******************************************************************** 描述:定义函数: Calculate,计算结果 参数:int num1, char ch, int num2 返回值:返回两个数计算的结果result ********************************************************************/ int Calculate(int num1, char ch, int num2) { int result; switch(ch) { case '+': result = num1 + num2; break; case '-': result = num1 - num2; break; case '*': result = num1 * num2; break; case '/': result = num1 / num2; } return result; } /******************************************************************** 描述:定义函数:MainCalc,主要用于获取用户输入,并且进行计算 参数:void 返回值:result ********************************************************************/ int MainCalc() { //主函数进行计算 OperateNum datas; OperateSymbol symbol; int num1, num2, result, num; char ch, sign; InitOperateNum(&datas); InitOperateSymbol(&symbol); //把回车计算的操作符放在栈中 PushOperateSymbol(&symbol, '\n'); ch = getchar(); while((ch != '\n') || (GetOperateSymbol(&symbol) != '\n')) { if(!IsOperateSymbolOrNum(ch)) { num = atoi(&ch); //将字符转换为整数 ch = getchar(); //获取输入 while(!IsOperateSymbolOrNum(ch)) { num = num * 10 + atoi(&ch); ch = getchar(); //当没有输入回车时,继续获取输入 } PushOperateNum(&datas, num); } else { switch(Priority(GetOperateSymbol(&symbol), ch)) { //判断优先级后进行计算 case '<': PushOperateSymbol(&symbol, ch); ch = getchar(); break; case '=': sign = PopOperateSymbol(&symbol); ch = getchar(); //获取输入 break; case '>': sign = PopOperateSymbol(&symbol); num2 = PopOperateNum(&datas); num1 = PopOperateNum(&datas); result = Calculate(num1, sign, num2); PushOperateNum(&datas, result); break; } } } result = GetOperateNum(&datas); return result; } int main(int argc, char *argv[]) { int result; printf("请输入运算式:\n"); result = MainCalc(); printf("结果为:\n"); printf("%d\n", result); //输出结果 return 0; }
大佬帮忙看一下这个递归子函数表达的算法,实在是看不懂,谢谢!
/*将数组中的字符反向输出*/ void backward(char s[],int index) { if(s[index]) { backwards(s,index+1); printf("%c",s[index]); } } if后面括号里的是什么东西?是表达式吗? 这个递归算法是什么意思? 本人小白,希望大佬帮忙看一下,谢谢!
实习作业不会做求指点
1.算术表达式求值 [问题描述] 出题给小学生做,每次考试的题数可以设定,随机产生n个题目,将题目及标准答案写入文件中;题目涉及加减乘除,带括弧的混合运算;根据答题情况给出分数;将学生的学号,每道题的答案,分数也写入文件中,即每个学生的考试情况放在一个文件中保存。 一个算式的求值:求一个可能包含加、减、乘、除运算的中缀表达式的值。在计算机中,我们常用栈来解决这一问题。首先将中缀表达式转换到后缀表达式,然后对后缀表达式求值。加、减、乘、除分别用+,-,*, /,来表示。表达式可以有圆括号()。每个表达式中,圆括号、运算符和运算数相互之间都用空格分隔,运算数是整数,考虑除数为0的情况,除法的商向下取整。 [测试数据] 2 * 5 + 6 * ( 7 - 8 ) + 6 输出结果为10 [实现提示] (1)在程序中会用到两类栈:操作数栈和运算符栈,分别为整型数据和字符型数据,设置运算符栈和操作数栈辅助分析算符优先关系; (2) 在读入字符序列时,完成运算符和操作数的处理,以及相应运算; (3) 算符之间的优先关系可参考数据结构教材 。
数据结构用栈实现算术表达式的求值运算
小白一枚,最近用栈实现算术表达式的求值运算结果出现好多问题,单独的加减乘除运算都能够实现,但一旦加上括号运算就停在那命令窗口也不能输入信息,跪求大神指点原因 附上代码和截图:![图片说明](https://img-ask.csdn.net/upload/201511/16/1447681940_987141.png) #include<malloc.h> #include<stdlib.h> #include<stdio.h> #define STACK_INIT_SIZE 100 //存储空间初始分配量; #define S 10 //存储空间分配增量; #define OK 1 #define ERROR 0 typedef int ElemType; typedef struct{ char *base; char *top; int stacksize; }sqstack; //定义运算符类型栈; typedef struct{ int *base; int *top; int stacksize; }stack; //定义运算数栈; void InitStack(sqstack &OPTR) //构建运算符栈; { OPTR.base=(char *)malloc(STACK_INIT_SIZE*sizeof(char)); if(!OPTR.base) printf("Error!\n"); OPTR.top=OPTR.base; OPTR.stacksize=STACK_INIT_SIZE; return; } void Initstack(stack &OPND) //构建运算数栈; { OPND.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int)); if(!OPND.base) printf("ERror!"); OPND.top=OPND.base; OPND.stacksize=STACK_INIT_SIZE; return; } int In(char ch) //判断字符是否是运算符; { int r; switch(ch) { case '+': case '-': case '*': case '/': case '#':r=1;break; default:r=0;break; } return r; } void PuSh(sqstack &OPTR,char ch) //运算符栈插入新的运算符栈顶元素; { if(OPTR.top-OPTR.base>=OPTR.stacksize) //栈满,追加存储空间; { OPTR.base=(char *)realloc(OPTR.base,(OPTR.stacksize+S)*sizeof(char)); if(!OPTR.base) printf("错误!"); OPTR.top=OPTR.base+OPTR.stacksize; OPTR.stacksize+=S; } *OPTR.top++=ch; printf("成功插入(puSh)运算符栈顶元素!\n"); } void PoP(sqstack &OPTR,char &ch) //删除字符的栈顶元素;(!!!!!!!!!!!!!!) { if(OPTR.top==OPTR.base) printf("error"); ch=* --OPTR.top; printf("删除字符栈顶元素!\n"); } char GetTop(sqstack &OPTR) //得到运算符栈顶元素;(!!!!!!!!!!!!!) { char c; if(OPTR.top==OPTR.base) printf("error!"); c=*(OPTR.top-1); printf("运算符栈顶元素正常\n"); return c; } void Push(stack &OPND,int e) //运算数栈插入新的运算数栈顶元素; { if(OPND.top-OPND.base>=OPND.stacksize) //栈满,追加空间; { OPND.base=(int *)realloc(OPND.base,(OPND.stacksize+S)*sizeof(int)); if(!OPND.base) printf("运算数栈错误!"); OPND.top=OPND.base+OPND.stacksize; OPND.stacksize+=S; } *OPND.top++=e; printf("成功插入运算数栈!\n"); } void Pop(stack &OPND,int &e) //删除运算数栈的栈顶元素;(!!!!!!!!!!!!!!!) { if(OPND.top==OPND.base) printf("error"); e=* --OPND.top; printf("成功删除运算数栈!"); } int Gettop(stack &OPND) //得到运算数栈顶元素;(!!!!!!!!!!!!!!!!!!) { int a; if(OPND.top==OPND.base) return 0; else a=*(OPND.top-1); return a; } char compare(char a,char b) //判断运算符的优先级; { int i,j; int array[7][7]= //1表示">",-1表示"<",0表示"=",2表示不可能 { {1,1,-1,-1,-1,1,1}, {1,1,-1,-1,-1,1,1}, {1,1,1,1,-1,1,1}, {1,1,1,1,-1,1,1}, {-1,-1,-1,-1,-1,0,2}, {1,1,1,1,2,1,1}, {-1,-1,-1,-1,-1,2,0} }; switch(a) { case '+':i=0;break; case '-':i=1;break; case '*':i=2;break; case '/':i=3;break; case '(':i=4;break; case ')':i=5;break; case '#':i=6;break; } switch(b) { case '+':j=0;break; case '-':j=1;break; case '*':j=2;break; case '/':j=3;break; case '(':j=4;break; case ')':j=5;break; case '#':j=6;break; } if(array[i][j]==1) return '>'; else if(array[i][j]==-1) return '<'; else if(array[i][j]==0) return '='; else printf("error!"); printf("该函数被调用"); return 1; } int operate(int p,char f,int q) { switch(f) { case '+':return p+q; case '-':return p-q; case '*':return p*q; case '/':return p/q; } return 1; } int EvaluateExpression() { char c,f, d[100],e; int i, num, tmpa, tmpb; sqstack OPTR; stack OPND; InitStack(OPTR);Initstack(OPND); PuSh(OPTR,'#'); c=getchar(); while(c!='#'||(e=GetTop(OPTR))!='#') { if(c>='0'&&c<='9') { i=0; do{ d[i++]=c; c=getchar(); }while(c>='0'&&c<='9'); d[i]='\0'; num=atoi(d); Push(OPND, num); } else if(In(c)) { switch(compare(GetTop(OPTR), c)) { case '<': PuSh(OPTR, c);c=getchar(); break; case '=': PoP(OPTR, f);c=getchar(); break; case '>': PoP(OPTR, f);Pop(OPND, tmpb);Pop(OPND, tmpa); Push(OPND, operate(tmpa, f, tmpb)); break; } } } return Gettop(OPND); } int EvaluateExpression(); //主操作函数 void main() { int r; printf("请输入表达式:"); r=EvaluateExpression(); printf("输出结果为:%d\n",r); }
谁能教教我怎么编写这个程序
出题给小学生做,每次考试的题数可以设定,随机产生n个题目,将题目及标准答案写入文件中;题目涉及加减乘除,带括弧的混合运算;根据答题情况给出分数;将学生的学号,每道题的答案,分数也写入文件中,即每个学生的考试情况放在一个文件中保存。 一个算式的求值:求一个可能包含加、减、乘、除运算的中缀表达式的值。在计算机中,我们常用栈来解决这一问题。首先将中缀表达式转换到后缀表达式,然后对后缀表达式求值。加、减、乘、除分别用+,-,*, /,来表示。表达式可以有圆括号()。每个表达式中,圆括号、运算符和运算数相互之间都用空格分隔,运算数是整数,考虑除数为0的情况,除法的商向下取整。 [测试数据] 2 * 5 + 6 * ( 7 - 8 ) + 6 输出结果为10 [实现提示] (1)在程序中会用到两类栈:操作数栈和运算符栈,分别为整型数据和字符型数据,设置运算符栈和操作数栈辅助分析算符优先关系; (2) 在读入字符序列时,完成运算符和操作数的处理,以及相应运算; (3) 算符之间的优先关系可参考数据结构教材 。
sizeof算出的数组大小怎么不对呢?
在调用match和chang函数的时候sizeof(str)-1为3这是为什么? ``` #include<iostream> using namespace std; #define ok 1 #define no 0 #define error 0 #define yes 1 #define maxsize 50 struct sqstack//定义一个顺序栈 { char data[maxsize]; int top, bottom; }; struct sqqueue//定义一个顺序队列 { char data[maxsize]; int front, rear; }; int initstack(sqstack &s)//初试化栈 { s.bottom = s.top = -1; return ok; } int initqueue(sqqueue &q)//初始化队列 { q.front = q.rear = 0; return ok; } int stack_isempty(sqstack s)//判栈空 { if (s.bottom == s.top) return yes; else return no; } int queue_isempty(sqqueue q)//判队空 { if (q.front == q.rear) return yes; else return no; } int stack_isfull(sqstack s)//判栈满 { if (s.top-s.bottom>=maxsize) return yes; else return no; } int queue_isfull(sqqueue q)//判队满 { if ((q.rear+1)%maxsize==q.front) return yes; else return no; } int push(sqstack &s, char x)//入栈 { if (stack_isfull(s)) return error; else { s.data[++s.top] = x; return ok; } } int pop(sqstack &s, char &x)//出栈 { if (stack_isempty(s)) return error; else { x = s.data[s.top--]; return ok; } } int gettop(sqstack s, char &x)//取栈顶元素 { if (stack_isempty(s)) return error; else { x = s.data[s.top]; return ok; } } int enqueue(sqqueue &q, char x)//进队 { if (queue_isfull(q)) return error; else { q.data[q.rear] = x; q.rear = (q.rear + 1) % maxsize; return ok; } } int dequeue(sqqueue &q, char &x)//出队 { if (queue_isempty(q)) return error; else { x=q.data[q.front]; q.front = (q.front + 1) % maxsize; return ok; } } int priority(char x)//判断优先级 { int n=0; switch (x) { case '+':n = 3; break; case '-':n = 3; break; case '*':n = 5; break; case '/':n = 5; break; case '(':n = 1; break; case ')':n = 6; break; default: break; } return n; } /*括号匹配思想 从左到右依次扫描每个元素 (1)如果是左括号,直接入栈; (2)如果是右括号,则出栈,若出栈的是左括号;则该右括号匹配成功;否则括号匹配失败; (3)扫描完成后若栈空,匹配成功;否则匹配失败; */ int match(char str[]) { int i; int n = sizeof(str)-1; char x; sqstack s; initstack(s); for (i = 0; i < n; i++) { switch (str[i]) { case '(':push(s, str[i]); break; case ')':pop(s, x); if (x = '(') break; else return error; default:break; } } if (stack_isempty(s)) return ok; else return error; } /*中缀转后缀表达式: 从左到右依次扫描每个元素 (1)如果是左括号,直接入栈; (2)如果是右括号,则将栈中左括号以及之上的元素依次出栈,如果出栈的元素不是左括号,则加入后缀表达式中(这里用队列来存储,也可以直接输出); (3)如果是其他运算符,如果该操作符优先级比栈顶元素高则直接入栈;否则,依次出栈,加入后缀表达式中,直到如果该操作符优先级比栈顶元素高或者栈空为止;将该元素入栈,(设左括号优先级小于任何操作符); (4)如果是操作数直接加入后缀表达式(这里用队列来存储,也可以直接输出)*/ int chang(char str[]) { int i; char x; int n = sizeof(str)-1; sqstack s; initstack(s); sqqueue q; initqueue(q); for (i = 0; i < n; i++)//从左到右依次扫描 { if (str[i] == '(')//如果是左括号直接入栈,然后扫描下一个元素 if (push(s, str[i])) continue; else return error; else if (str[i] == ')')//如果是右括号,则将左括号之上的元素出栈,依次入队,然后将括号出栈 { while (!stack_isempty(s)) { pop(s, x); if (x != '(') enqueue(q, x); else break; } continue; } else if (str[i] == '+' || str[i] == '-' || str[i] == '*' || str[i] == '/')//如果是四则运算的符号 { if (gettop(s, x))//如果栈不为空,取出栈顶元素 if (priority(str[i]) > priority(x))//如果当然元素优先级别大于栈顶元素的优先级别,则入栈 { if (push(s, str[i])) continue; } else { while (!stack_isempty(s) && priority(str[i]) <= priority(s.data[s.top]))//否则将优先级高于或等于当前运算符的栈顶元素依次出栈并入队,直到栈顶元素优先级比自己低或者遇到左括号为止 { pop(s, x); enqueue(q, x); } push(s, str[i]); continue; } else//如果栈空,则直接入栈 { push(s, str[i]); continue; } } else//如果是操作数则直接进队 { enqueue(q, str[i]); continue; } } while (!stack_isempty(s))//扫描完成后将栈中剩余的操作符依次入队 { pop(s, x); enqueue(q, x); } while (!queue_isempty(q))//输出后缀表达式 { dequeue(q, x); cout << x; } return ok; }void main() { char str[] = "a+b-a*((c+d)/e-f)+g"; if (match(str)) chang(str); else cout << "表达式括号不匹配,请重新输入"; } ```
VC6.0 小学生四则运算
程序调试没有错误,就是运行不了 #include<iostream> #include<cstdlib> #include<string> #include <fstream> #include <conio.h> #include<iomanip> #include<ctime> using namespace std; #define MaxSize 100 struct stud { string usename;//文件记录的用户名 string code;//文件记录的密码 int sumnum;//总题数 double percent;//正确率 string end; }student[100];//stud student[100]; string rightusename,rightcode; int rightsumnum; double rightpercent; int n2;//文件中记录的学生所在第几个位置 int init1() { cout<<"小学生四则运算考试模拟系统"<<endl; cout<<" | "<<endl; cout<<" | "<<endl; cout<<" 1.登陆 | "<<endl; cout<<" | "<<endl; cout<<"------------+-------------"<<endl; cout<<" | "<<endl; cout<<" 2.注册 | "<<endl; cout<<" | "<<endl; cout<<" | "<<endl; cout<<"请选择(输入数字):"<<endl; return 1; } int calculate() { string usename; string code; ifstream fp2; fp2.open ("data.txt"); fp2.seekg (0, ios::end); int last = fp2.tellg(); // cout<<"个数"<<last; // cout<<"模版"<<sizeof(student)/100; int n=last/(sizeof(student)/100-7); // cout<<"对象个数:"<<n<<"\n"; //查询文件中对象的个数 ifstream fp3("data.txt"); int i=0; int sumnum; double percent; string end; while(i<n) { fp3>>usename>>code>>sumnum>>percent>>end; student[i].usename=usename; student[i].code=code; i++; } return n; } bool checkout()//登陆验证 { string usename; string code; cout<<"please input your usename:"; cin>>usename; int count=calculate(); bool findname=false; for (int i=0;i<count;i++) { if (student[i].usename==usename) { findname=true; rightusename=usename; cout<<"Name OK!\n"; int j=0; char str[10]="\0"; cout<<"please input your password:"; while (1) { str[j]= getch(); if (str[j++]=='\r')break; cout<<"*"; } for(int s = 0;s<j-1;s++) code += str[s]; bool findcode=false; if (student[i].code==code) { cout<<"\nLogin successfully!"<<endl; findcode=true; n2=i; rightcode=code; system("pause"); return true; } if (!findcode) { cout<<"\nPassword is not correct!"<<endl; system("pause"); return false; } } } if (!findname) { cout<<"Usename is not existed!"<<endl; system("pause"); return false; } getch(); } void Register()//注册 { string code,usename; double percent=0; int sumnum=0; cout<<"请输入你所确定用户名:"; cin>>usename; bool findname = true; while(findname){ findname = false; int count = calculate(); for (int i=0;i < count;i++) { if (!student[i].usename.compare(usename) ) {findname=true;} } if (findname) { cout<<"******************************"<<endl; cout<<"* 用户名已存在! *"<<endl; cout<<"* 请重新输入你的用户名! *"<<endl; cout<<"******************************"<<endl; system("pause"); system("cls"); cout<<"你所确定的用户名:"; cin>>usename; } } int i=0; char str[10]="\0"; cout<<"请输入你所确定的密码:"; while (1) { str[i]= getch(); if (str[i++]=='\r')break; cout<<"*"; } for(int s = 0;s<i-1;s++) code += str[s]; // cout<<"\n请分别输入你所确定密码:"<<code<<endl; string end="end"; int number=0; ofstream fp("data.txt",ios::app); fp<<setw(16)<<usename<<"\n"<<setw(16)<<code<<"\n" <<setw(4)<<sumnum<<"\n"<<setw(8)<<percent<<"\n"<<end<<endl; cout<<"\n"<<"\t"<<" 注册成功!"<<endl; cout<<"*************************************"<<endl; printf("请重新登陆,退出请按E,继续请按其他键!"); char E; scanf("%s",&E); if(E=='E')exit(0); } struct { char ch; int pri; } //设定运算符优先级,ch运算符,pri优先级 lpri[]={{'=',0},{'(',1},{'*',5},{'/',5},{'+',3}, {'-',3},{')',6}}, rpri[]={{'=',0},{'(',6},{'*',4},{'/',4},{'+',2}, {'-',2},{')',1}}; int leftpri(char op) //求左运算符op的优先级 { int i; for (i=0;i<7;i++) if (lpri[i].ch==op) return lpri[i].pri; } int rightpri(char op) //求右运算符op的优先级 { int i; for (i=0;i<7;i++) if (rpri[i].ch==op) return rpri[i].pri; } bool InOp(char ch) //判断ch是否为运算符 { if (ch=='(' || ch==')' || ch=='+' || ch=='-' || ch=='*' || ch=='/') return true; else return false; } int Precede(char op1,char op2) //op1和op2运算符优先级的比较结果 { if (leftpri(op1)==rightpri(op2)) return 0; else if (leftpri(op1)<rightpri(op2)) return -1; else return 1; } void trans(char *exp,char postexp[]) //将算术表达式exp转换成后缀表达式postexp { struct { char data[MaxSize]; //存放运算符 int top; //栈指针 } op; //定义运算符栈 int i=0; //i作为postexp的下标 op.top=-1; op.top++; //将'='进栈 op.data[op.top]='='; while (*exp!='\0') //exp表达式未扫描完时循环 { if (!InOp(*exp)) //为数字字符的情况 { while (*exp>='0' && *exp<='9') //判定为数字 { postexp[i++]=*exp; exp++; } postexp[i++]='#'; //用#标识一个数值串结束 } else //为运算符的情况 switch(Precede(op.data[op.top],*exp)) { case -1: //栈顶运算符的优先级低:进栈 op.top++;op.data[op.top]=*exp; exp++; //继续扫描其他字符 break; case 0: //只有括号满足这种情况 op.top--; //将(退栈 exp++; //继续扫描其他字符 break; case 1: //退栈并输出到postexp中 postexp[i++]=op.data[op.top]; op.top--; break; } } //while (*exp!='\0') while (op.data[op.top]!='=') //此时exp扫描完毕,退栈到'='为止 { postexp[i++]=op.data[op.top]; op.top--; } postexp[i]='\0'; //给postexp表达式添加结束标识 } float compvalue(char exp[]) //计算后缀表达式的值 { struct { float data[MaxSize]; //存放数值 int top; //栈指针 } st; //定义数值栈 float d; char ch; int t=0; //t作为exp的下标 st.top=-1; ch=exp[t];t++; while (ch!='\0') //exp字符串未扫描完时循环 { switch (ch) { case'+':st.data[st.top-1]= st.data[st.top-1]+st.data[st.top]; st.top--;break; case '-':st.data[st.top-1]= st.data[st.top-1]-st.data[st.top]; st.top--;break; case '*':st.data[st.top-1]= st.data[st.top-1]*st.data[st.top]; st.top--;break; case '/': if (st.data[st.top]!=0) st.data[st.top-1]= st.data[st.top-1]/st.data[st.top]; else { cout<<"\n"<<"\t"<<"除零错误!"<<endl; exit(0); //异常退出 } st.top--;break; default: d=0; //将数字字符转换成数值存放到d中 while (ch>='0' && ch<='9') //为数字字符 { d=10*d+ch-'0'; ch=exp[t];t++; } st.top++; st.data[st.top]=d; } ch=exp[t];t++; } return st.data[st.top]; } void test() { char algtype[10] ;//计算类型 int i,j,t,//for的循环控制变量 points = 0;//成绩 string usename,code,end; srand((unsigned )time(NULL)); int n=rand()%6+5,//题目的个数,为5到10个 num[MaxSize][MaxSize];//操作数 char op[]={'+','-','*','/'}; cout<<"---------------------------------小学生算法运算测评-----------------------------"; cout<<"现在开始计算:"<<endl<<endl; for(i=0;i<n;++i) { cout<<"第"<<i+1<<"道题:"<<endl; srand((unsigned )time(NULL)); int m=rand()%4+2;//每道题中数字的个数,为2到5个 for(j=0;j<m;++j) { num[i][j] = rand() % 9+1; //产生的随机整数 algtype[j] = rand() % 4; } char string[MaxSize];//把符号数组和数字数组组合在一个字符串里 for(t=0,j=0;t<2*m-2;++t) { string[t]=num[i][j]+'0'; t++; string[t]=op[algtype[j]]; j++; } string[2*m-2]=num[i][m-1]+'0'; string[2*m-1]='\0'; //插入括号 int t=rand() % 5, r=rand() % 5,//r,t都是小于m的随机数 min,max,a;//a为字符串的长度 while(t==r||t>=m||r>= m) { r=rand()%5; t=rand() % 5; } min=t>r?r:t;//min为r,t较小的数 max=t>r?t:r;//max为t,r较大的数 if(min==0&&max==m-1); else { for(a=2*m-1;a>2*min;a--) string[a]=string[a-1]; string[2*min]='('; for(a=2*m;a>2*max+2;a--) string[a]=string[a-1]; string[2*max+2]=')'; string[2*m+1]='\0'; } //输出字符串 int d=0; while(string[d]!='\0') cout<<string[d++]; cout<<"= ?"<<"\n"<<"\t"<<"请输入答案:"; char answer[4]; //学生回答 cin>>answer; char postexp[MaxSize]; trans(string,postexp);//求得正确的答案 int value= compvalue(postexp);//value放的是正确的结果程序的计算结果 int i1= 0; int totle=0; bool fuhao = false; if(answer[0] == '-') {fuhao = true;i1++;} for(;answer[i1]!='\0';i1++) { totle=totle*10+answer[i1]-'0'; } if(fuhao) {totle = -totle;} if(totle == value) { cout<<"\t"<<"恭喜你,答案是对的!"<<endl; points++; } else { cout<<"\t"<<"抱歉,你做错了!"; cout<<"\t"<<"正确的答案是:"<<value<<endl; } int sumnum; double percent; char yesORno ; //回答是否继续 if(i<n-1) { cout<<"\t"<<"是否继续?y/n"<<"\t"; cin>>yesORno; if(yesORno =='y') cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl; else { cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl; cout<<"你已终止答题!"<<endl; cout<<"你所答的题目总数为:"<<i+1<<"\t"; cout<<"你目前答对的题目数:"<<points<<"\t"; cout<<"\n"<<"你答题的正确率是:"<<setprecision(3)<<float(points)/float(i+1)*100<<"%"<<endl; rightsumnum=i+1; rightpercent=float(points)/float(i+1)*100; i = n; } } if(i==n-1) { cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl; cout<<"你已完成所有的题目!"<<endl; cout<<"你所答的题目总数为:"<<i+1<<"\t"; cout<<"你目前答对的题目数:"<<points<<"\t"; cout<<"你答题的正确率是:"<<setprecision(3)<<float(points)/float(i+1)*100<<"%"<<endl; rightsumnum=i+1; rightpercent=float(points)/float(i+1)*100; } int location=n2*(sizeof(student)/100-7); fstream inoutfile("data.txt"); inoutfile.seekp(location); inoutfile<<setw(16)<<rightusename<<"\n"<<setw(16)<<rightcode<<"\n" <<setw(4)<<rightsumnum<<"\n"<<setw(8)<<rightpercent<<"\n"<<"end"<<endl; inoutfile.close (); } } int seegrade() { string end; system("cls"); int location=n2*(sizeof(student)/100-7); ifstream infile("data.txt"); infile.seekg(location); infile>>rightusename>>rightcode>>rightsumnum>>rightpercent>>end; int yes=rightpercent/100*rightsumnum; cout<<" \1\1\1\1 尊敬的"<<rightusename<<" \1\1\1\1"<<endl; cout<<"****************************************************"<<endl; cout<<"*您的上一次答题情况 *"<<endl; cout<<"*你所答题的个数为:"<<rightsumnum<<" *"<<endl; cout<<"*你答对的题目数为:"<<yes<<" *"<<endl; cout<<"*你答题的正确率为:"<<rightpercent<<"%"<<" *"<<endl; cout<<"****************************************************"<<endl; infile.close (); return 1; } int init2() { system("cls"); cout<<"小学生四则运算考试模拟系统"<<endl; cout<<" | "<<endl; cout<<" | "<<endl; cout<<" 1.开始答题| "<<endl; cout<<" | "<<endl; cout<<"------------+-------------"<<endl; cout<<" | "<<endl; cout<<" 2.查看分数| "<<endl; cout<<" | "<<endl; cout<<"------------+-------------"<<endl; cout<<" | "<<endl; cout<<" 3.退出 | "<<endl; cout<<" | "<<endl; cout<<" | "<<endl; cout<<"请选择(输入数字):"<<endl; return 1; } int main() { while(1) { int i; init1(); i = getch(); if(i=='1') system("cls"); else if(i='2'){system("cls");Register();system("cls");cout<<"请重新登录!"<<endl; } if(checkout()) { while(1) { init2(); int i = getch(); fflush(stdin);//清除缓冲区 if(i == '1') { system("cls"); test(); system("pause"); } else if(i == '2') {seegrade();system("pause");} else if(i == '3') break; } system("cls"); cout<<"感谢您的使用!"<<endl; system("pause"); } system("cls"); } return(0); } 请各位大神帮一下忙,不胜感激!
在中国程序员是青春饭吗?
今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...
《MySQL 性能优化》之理解 MySQL 体系结构
本文介绍 MySQL 的体系结构,包括物理结构、逻辑结构以及插件式存储引擎。
程序员请照顾好自己,周末病魔差点一套带走我。
程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。
Python+OpenCV实时图像处理
目录 1、导入库文件 2、设计GUI 3、调用摄像头 4、实时图像处理 4.1、阈值二值化 4.2、边缘检测 4.3、轮廓检测 4.4、高斯滤波 4.5、色彩转换 4.6、调节对比度 5、退出系统 初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
python爬取百部电影数据,我分析出了一个残酷的真相
2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%;国产电影总票房411.75亿元,同比增长8.65%,市场占比 64.07%;城市院线观影人次17.27亿,同比增长0.64%。 看上去似乎是一片大好对不对?不过作为一名严谨求实的数据分析师,我从官方数据中看出了一点端倪:国产票房增幅都已经高达8.65%了,为什...
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
C语言荣获2019年度最佳编程语言
关注、星标公众号,不错过精彩内容作者:黄工公众号:strongerHuang近日,TIOBE官方发布了2020年1月编程语言排行榜单。我在前面给过一篇文章《2019年11月C语言接近Ja...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
一份王者荣耀的英雄数据报告
咪哥杂谈本篇阅读时间约为 6 分钟。1前言前一阵写了关于王者的一些系列文章,从数据的获取到数据清洗,数据落地,都是为了本篇的铺垫。今天来实现一下,看看不同维度得到的结论。2环境准备本次实...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
一个程序在计算机中是如何运行的?超级干货!!!
强烈声明:本文很干,请自备茶水!???? 开门见山,咱不说废话! 你有没有想过,你写的程序,是如何在计算机中运行的吗?比如我们搞Java的,肯定写过这段代码 public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } ...
【蘑菇街技术部年会】程序员与女神共舞,鼻血再次没止住。(文末内推)
蘑菇街技术部的年会,别开生面,一样全是美女。
那个在阿里养猪的工程师,5年了……
简介: 在阿里,走过1825天,没有趴下,依旧斗志满满,被称为“五年陈”。他们会被授予一枚戒指,过程就叫做“授戒仪式”。今天,咱们听听阿里的那些“五年陈”们的故事。 下一个五年,猪圈见! 我就是那个在养猪场里敲代码的工程师,一年多前我和20位工程师去了四川的猪场,出发前总架构师慷慨激昂的说:同学们,中国的养猪产业将因为我们而改变。但到了猪场,发现根本不是那么回事:要个WIFI,没有;...
为什么程序猿都不愿意去外包?
分享外包的组织架构,盈利模式,亲身经历,以及根据一些外包朋友的反馈,写了这篇文章 ,希望对正在找工作的老铁有所帮助
Java校招入职华为,半年后我跑路了
何来 我,一个双非本科弟弟,有幸在 19 届的秋招中得到前东家华为(以下简称 hw)的赏识,当时秋招签订就业协议,说是入了某 java bg,之后一系列组织架构调整原因等等让人无法理解的神操作,最终毕业前夕,被通知调往其他 bg 做嵌入式开发(纯 C 语言)。 由于已至于校招末尾,之前拿到的其他 offer 又无法再收回,一时感到无力回天,只得默默接受。 毕业后,直接入职开始了嵌入式苦旅,由于从未...
世界上有哪些代码量很少,但很牛逼很经典的算法或项目案例?
点击上方蓝字设为星标下面开始今天的学习~今天分享四个代码量很少,但很牛逼很经典的算法或项目案例。1、no code 项目地址:https://github.com/kelseyhight...
​两年前不知如何编写代码的我,现在是一名人工智能工程师
全文共3526字,预计学习时长11分钟 图源:Unsplash 经常有小伙伴私信给小芯,我没有编程基础,不会写代码,如何进入AI行业呢?还能赶上AI浪潮吗? 任何时候努力都不算晚。 下面,小芯就给大家讲一个朋友的真实故事,希望能给那些处于迷茫与徘徊中的小伙伴们一丝启发。(下文以第一人称叙述) 图源:Unsplash 正如Elsa所说,职业转换是...
强烈推荐10本程序员必读的书
很遗憾,这个春节注定是刻骨铭心的,新型冠状病毒让每个人的神经都是紧绷的。那些处在武汉的白衣天使们,尤其值得我们的尊敬。而我们这些窝在家里的程序员,能不外出就不外出,就是对社会做出的最大的贡献。 有些读者私下问我,窝了几天,有点颓丧,能否推荐几本书在家里看看。我花了一天的时间,挑选了 10 本我最喜欢的书,你可以挑选感兴趣的来读一读。读书不仅可以平复恐惧的压力,还可以对未来充满希望,毕竟苦难终将会...
作为一个程序员,内存的这些硬核知识你必须懂!
我们之前讲过CPU,也说了CPU和内存的那点事儿,今天咱就再来说说有关内存,作为一个程序员,你必须要懂的哪那些硬核知识! 大白话聊一聊,很重要! 先来大白话的跟大家聊一聊,我们这里说的内存啊,其实就是说的我们电脑里面的内存条,所以嘞,内存就是内存条,数据要放在这上面才能被cpu读取从而做运算,还有硬盘,就是电脑中的C盘啥的,一个程序需要运行的话需要向内存申请一块独立的内存空间,这个程序本身是存放在...
非典逼出了淘宝和京东,新冠病毒能够逼出什么?
loonggg读完需要5分钟速读仅需 2 分钟大家好,我是你们的校长。我知道大家在家里都憋坏了,大家可能相对于封闭在家里“坐月子”,更希望能够早日上班。今天我带着大家换个思路来聊一个问题...
立即提问

相似问题

6
正则表达式find()方法的问题。
2
c# 正则表达式 表达式
1
如何实现Vue不加小括号调用构造函数
1
javascript对象用中括号取值不加双引号为什么会去访问变量
1
正则表达式怎么匹配最外层&& 与最外层 || ?
3
页面el表达式,$括号中,如何实现字符串的拼接?
3
【求助】 学习作业,求大佬帮忙看看???
2
C语言写一算法,对输入的表达式中括号匹配情况检查。匹配的括号需要成对出现,且不嵌套。
1
数据结构题目(c语言),把只能实现带小括号的表达式计算改为可以带小中大括号的表达式计算
0
python如何进行多重<ul></ul>标签的匹配?
1
输入若干个正整数(输入-1为结束标志),建立一个单向链表,将其中的偶数值结点删除后输出。
5
python 这样列表 [("1","2","3")] 里有小括号,怎么去掉小括号啊
0
中缀带括号的表达式转换为前缀表达式的C语言怎么用堆栈来实现的?数据结构的办法
1
正则表达式括号里面为什么匹配了两次?
2
django 用url传递一个参数时无法成功
3
在idea中创建项目时,项目的名字后面会有一个中括号,并且这个中括号中也有一个名字。这是为什么
1
怎么把两个正则表达式用或的关系一起使用?
2
正则表达式如何判断括号内是否内嵌了括号?
2
如何用一个正则表达式判断另一个正则表达式有没有内嵌括号?
1
swift 初学者 小括号这种写法代表什么。 let blackView: UIView = { code }()