在一个文件中,创建了多个源文件,不小心移除掉一个源文件,怎么找回
废纸篓里有吗
没有彻底删除 可以直接添加回来吧
怎么移除的,直接delete了还是右键,排除的
如果是删除了,需要先从回收站里将它恢复
如果只是排除,它还在原来的位置,只不过项目里看不见了
可以右键,添加现有项,找到它,加回来
问题:用栈实现中缀表达式的识别运算 (中缀表达式:运算符在数据中间,1+2*3-6这种。
输入:1+2*3-6 输出:1
输入:9+4*(2+3) 输出:33
思想:创建一个数据栈OPND,一个符号栈OPTR,设OPTR栈头默认为 ’‘#“ ,字符串尾也添加 ’‘#“ ,用以表示结束(当两个#相碰撞时),接着遍历字符串为数据时,push数据进入OPND栈中,当遍历字符串为符号时,与符号栈OPTR栈顶元素比较,优先级比栈顶大就进栈。优先级比栈顶小就拿出数据栈中前两个数据与符号栈OPTR栈顶的符号进行运算。(下面有优先级对比解释)运算结果压栈到数据栈中。然后继续遍历字符串直到尾部#。
总结符号优先级(四则运算)
1:符号栈OPTR栈顶的运算符
2:表达式中当前的cur指向的运算符
1 >
2时,说明这时候栈顶优先级符号比较大,我们要先算数据。
1 >
2时,说明栈顶符号比较小,可以之后算,先算乘除后算加减。而且
1是左括号( 时,他的优先级最小,先把后面的压进来先,
1是右括号时要优先算括号中的数据,故先要用之前的符号也就是符号栈OPTR栈顶符号与数据栈中前两个运算。
1 =
2时,说明遇到了一对()或者一对#,一对括号就说明括号中间的运算结束了,把这两括号去掉即可,即pop掉符号栈OPTR栈顶的(,与cur指向下一位。一对#即可结束。
具体实现图解:
实现代码:
char infix()//两个# 代表结束
{
ST OPTR,OPND;
StackInit(&OPTR);
StackInit(&OPND);
char a, b,theta;
StackPush(&OPTR, '#');
char c = getchar();
while (c != '#' || StackTop(&OPTR) != '#')//两个同时为# 才是结束,这两个挨在一起
{
if (isdigit(c))
{
StackPush(&OPND, c);
c = getchar();
}
else if (!in(c))
{
printf("出现非法字符\n");
exit(-1);
}
else
{
switch (judge(StackTop(&OPTR),c))
{
case '>':
//OPTR栈顶符号大,说明前面的数要先算
a = StackPop(&OPND);
b = StackPop(&OPND);
theta = StackPop(&OPTR);
StackPush(&OPND, calculate(b, theta, a));
break; //这时候c还没有用上,不用再取
case '=':
StackPop(&OPTR);
c = getchar();
break;
case '<':
//后者大,就把符号位压进来
StackPush(&OPTR, c);
c = getchar();
break;
}
}
}//while
return StackTop(&OPND);
}
判断是否非法符号函数:
bool in(char c)
{
char a[] = { '+','-','*','/','(',')','#' ,'\0'};
char* pa = a;
while (*pa != '\0')
{
if (c == *pa)
return true;
else
pa++;
}
return false;
}
比较符号优先级函数:
char judge(char a, char b)
{
if ((a == '#' && b == '#') || a == '(' && b == ')')
return '=';
else if (a == '#' || a == '(' || b == '(' ||
((a == '+' || a == '-') && (b == '*' || b == '/'))) //a是开括号就都要压栈
return '<';
else
return '>';
}
运算函数:
char calculate(char a, char theta, char b)
{
char temp = 0;
switch (theta)
{
case '+':
temp = (a - '0') + (b - '0') + 48;
break;
case '*':
temp = (a - '0') * (b - '0') + 48;
break;
case '/':
temp = (a - '0') / (b - '0') + 48;
break;
case '-':
temp = (a - '0') - (b - '0') + 48;
break;
}
return temp;
}
操作系统:(未提供信息) VS版本:(未提供信息) 删除方式:(未提供信息)
对于误删源文件的问题,有以下几种解决方案:
使用版本控制工具 如果你使用Git或SVN等版本控制工具进行代码管理,你可以在工具中找回已经删除的文件。在Git中,使用git checkout
命令加上被删除文件的路径,即可将其恢复。在SVN中,使用svn update
命令也能找回已删除文件。
使用Windows回收站 如果你的操作系统是Windows,你可以检查回收站中是否有被删除的文件。如果有的话,只需要将其还原即可。
使用Windows的阴影副本 Windows系统有一个叫做“阴影副本”的功能,它能够在文件被删除或修改之前自动备份该文件。你可以使用命令vssadmin list shadows
来列出所有系统为文件创建的阴影副本。然后使用copy
命令将被删除的文件从阴影副本中恢复到原来的位置。
使用第三方恢复软件 如果以上方法都无法找回被删除的文件,你可以使用一些第三方恢复软件,如Recuva、EaseUS Data Recovery Wizard等。这些软件能够扫描你的硬盘,找回被删除文件的痕迹,并将它们恢复到指定位置。
无论采用哪种方法,都应该在恢复文件之前先备份好当前的代码,以防在恢复过程中出现错误导致数据丢失。