离散数学__真值表__C++实现__析取,合取,非,条件,双条件
灵感来源——《栈的应用——四则运算表达式求值》
这个网上文章怪多的,就不赘述了。
博客园 :Been_You1997 | CSDN:宝宝丶0807 |
---|---|
https://www.cnblogs.com/didideblog/p/7096396.html | https://blog.csdn.net/lub0807/article/details/37884417 |
代码如下
已对代码进行尽可能的注释,希望对你有帮助
因为本人才疏学浅,若有错误及不足之处,欢迎指正
#include<iostream>
#include<string>
using namespace std;
class TrueValueTable
{
private:
char str[40] = {
'\0' };// 输入的字符的备份
char str2[40] = {
'\0' };// 后缀表达式
char strOfStack[40] = {
'\0' };// 栈数组
char proposition[10] = {
'\0' };// 命题元素
int sizeOfStr = 0;
int sizeOfStr2 = 0;
int sizeOfStack = 0;
int sizeOfProposition = 0;
int priority = 5; // 栈顶元素的优先值
bool trueOrFalse[10] = {
0 };// 命题元素的真假值
public:
// 输入字符串,并制作备份
TrueValueTable(const string& strIn)
{
// 将输入的字符串,拷贝到类中,避免更改原字符串后影响后续工作
for (int i = 0; i < 40 && i < strIn.length(); i++)
{
str[i] = strIn[i];
sizeOfStr++;
}
GetProposition();
}
// 获取命题元素
void GetProposition()
{
bool have = 0;// 用来保存遍历数组时,是否存在同名的命题元素名称
for (int i = 0; i < sizeOfStr; i++)
{
have = 0;
if (str[i] >= 'a' && str[i] <= 'z')
{
// 遍历数组,确定字符串中的命题元素是否已经保存至数组proposition
for (int j = 0; j < sizeOfProposition; j++)
if (str[i] == proposition[j])
have = 1;
// 若不存在,则保存至数组中
if (!have)
proposition[sizeOfProposition++] = str[i];
// 此处可为了命题元素有序,进行一此命题元素(a,b,c,d....)的排序
// 命题元素的顺序,不会影响到其表达式的计算
// 除写排序算法外不需做任何更改
/*此处*/;
}
}
}
// 将中缀表达式转换为后缀表达式
void InfixTransSuffix()
{
// 中缀表达式转后缀表达式这个你们自己参考文章
// 自认为写的不好 -_- 抱歉
for (int i = 0; i < sizeOfStr;)
if (str[i] <= 'z' && str