如何用C或C+编程序实现:从键盘任意输入一个命题公式,用真值表法判断其类型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用C或C+编程序实现:从键盘任意输入一个命题公式,用真值表法判断其类型相关的知识,希望对你有一定的参考价值。

参考技术A #include<iostream>
#include<string>
using namespace std;
string calcValue(string value1);
string calcValueNop(string value1);
string caclAnd(string x,string y);
string caclOr(string x,string y);
string caclNot(string x);
int main()
string in,varList="";//="!a+b^c"
cout<<"请输入命题公式: 注意: !,^,+,(,),字母为合法,不要有数字、空格,括号也要匹配!"<<endl;
cin>>in;
cout<<"输入命题公式"<<in<<"的真值表如下:"<<endl;
int length=in.length();
for(int i=0;i<length;i++)

char code=in[i];
if( ((code>=97)&&(code<123)||((code>=65))&&(code<81))&&varList.find(code,0)==-1 )
varList+=code;

int n=varList.length();
for(i=0;i<n;i++)
cout<<varList[i]<<"\t";
cout<<in<<"\t\t"<<"值"<<endl;

int m=1;
int flag;
char *trow=new char[n];
for(i=0;i<n;i++)m*=2;trow[i]='0';
for(i=0;i<m;i++)

for(int j=0;j<n;j++)
cout<<trow[j]<<"\t";
string value1=in;
for(j=0;j<n;j++)

char x=varList[j];
for(int k=0;k<length;k++)
if(value1[k]==x)
value1[k]=trow[j];

cout<<value1<<"\t\t"<<calcValue(value1)<<endl;
flag=1;
for(j=n-1;j>-1;j--)
int temp;
temp=int(trow[j])-48;
flag=flag+temp;
if(flag==2)

trow[j]='0';
flag=1;

else

trow[j]='1';
flag=0;
break;




delete trow;
return 0;


string calcValue(string value1)

int nlp=value1.find('(',0);
int nrp=value1.length();
string x="",v="";
int i=nlp+1;
while(nlp>=0)

x=value1.substr(i,1);
if(x=="(")

nlp=i;
i++;

else

if(x==")")

nrp=i;
v=calcValueNop(value1.substr(nlp+1,nrp-nlp-1));
value1=(nlp>0?value1.substr(0,nlp):"")+v+((nrp+1)<=value1.length()?value1.substr(nrp+1):"");
nlp=value1.find('(',0);
i=nlp+1;

else

i=i+1;


if(i>=value1.length())

nlp=value1.find('(',0);
i=nlp+1;


return calcValueNop(value1);


string calcValueNop(string value1)

int nnot=value1.find('!',0);
while(nnot>=0)

value1=(nnot>0?value1.substr(0,nnot):"")+caclNot(value1.substr(nnot+1,1))+((nnot+2)<=value1.length()?value1.substr(nnot+2):"");
nnot=value1.find('!',0);

int nand=value1.find('^',0);
while (nand>0)

value1=((nand-1)>0?value1.substr(0,nand-1):"")+caclAnd(value1.substr(nand-1,1),value1.substr(nand+1,1))+((nand+2)<=value1.length()?value1.substr(nand+2):"");
nand=value1.find('^',0);

int nOr=value1.find('+',0);
while (nOr>0)

value1=((nOr-1)>0?value1.substr(0,nOr-1):"")+
caclOr(value1.substr(nOr-1,1),value1.substr(nOr+1,1))+
((nOr+2)<=value1.length()?value1.substr(nOr+2):"");
nOr=value1.find('+',0);

return value1;


string caclAnd(string x,string y)

if ((x=="1") && (y=="1"))

return "1";

else

return "0";




string caclOr(string x,string y)

if ((x=="0") && (y=="0"))

return "0";

else

return "1";


string caclNot(string x)
if (x=="1")

return "0";

else

return "1";

参考资料:信息安全的孩子来啦

本回答被提问者采纳

以上是关于如何用C或C+编程序实现:从键盘任意输入一个命题公式,用真值表法判断其类型的主要内容,如果未能解决你的问题,请参考以下文章

如何用switch语句判断从键盘输入字符的属性属于大写字母,小写字母,数字或其他的符号

如何实现C语言中用键盘控制光标移动?

51单片机,用c语言,如何用矩阵键盘为一个变量char a赋值?已设计出一个函数,使得每按一个矩阵

如何用c语言实现多组数据输入,每组数据一行每行数据个数任意

c语言设计一个简单的计算器程序

C语言编程:从键盘输入10个数,求最大值,最小值和平均值