提问人:Heng Wei 提问时间:12/5/2020 更新时间:12/5/2020 访问量:358
相同的输入给出不同的输出?
Same input that gives different output?
问:
我正在尝试编写一个函数,该函数将布尔方程作为其输入,并给出该方程的答案作为其输出。例如:
输入:(!T|T)&F
输出: F
但是,在某些情况下,(当有括号时,相同的输入有时会给出 True,有时会给出 False)。例如:
输入:(T|T)&T
有时给T,有时给F。我是编程新手,我不确定我是否完全理解内存是如何工作的,有人可以检查我的代码并解释发生了什么吗?
#include <iostream>
#include <cstring>
using namespace std;
bool boolFunc(char* input, long len){
// Base cases
if(len == 2 && *input == '!'){
if(*(input+1) == 'T') return false;
if(*(input+1) == 'F') return true;
}
else if(len == 1){
if(*input == 'T')
return true;
else
return false;
}
//
else{
for (long i = len-1; i >= 0; i--) {
//for equations with '(' and ')'
if(*(input + i) == ')'){
for (long j = i-1; j >= 0; j--) {
if(*(input + j) == '('){
if(*(input + j - 1) == '&')
return boolFunc(input, j-1) && boolFunc(input+j+1, i-j-1);
else
return boolFunc(input, j-1) || boolFunc(input+j+1, i-j-1);
}
}
}
if(*(input + i) == '&'){
return boolFunc(input, i) && boolFunc(input+i+1, len-i-1);
}
if(*(input + i) == '|'){
return boolFunc(input, i) || boolFunc(input+i+1, len-i-1);
}
}
}
return false;
}
int main(){
char input[500] = {'\0'};
cin.getline(input, 500);
if(boolFunc(input,strlen(input)))
cout << "T" << endl;
else
cout << "F" << endl;
return 0;
}
答: 暂无答案
评论
-fsanitize=address