#include<iostream>
#include<string>
using namespace std;
class Gongshi{
private:
string yuanshimingti;
string guodu;
string zuijian;
int num;
public:
Gongshi(string a)
{
yuanshimingti=a;
guodu="00000000000000000000";
zuijian="00000000000000000000";
huoquzimu();
}
void huoquzimu()
{
int k=0;
for(int i=0;yuanshimingti[i]!=0;i++)
if((yuanshimingti[i]>='a')&&(yuanshimingti[i]<='z')){
guodu[k]=yuanshimingti[i];
k++;
}
guodu[k]='\0';
setguodu();
}
void setguodu()
{
int k=1;
zuijian[0]=guodu[0];
for(int i=1;guodu[i]!=0;i++){
if(jianyan(guodu[i],i)){
zuijian[k]=guodu[i];
k++;
}
}
guodu[k]='\0';
num=k;
}
bool jianyan(char a,int n)
{
for(int i=0;i<n;i++){
if(a==zuijian[i])
return 0;
}
return 1;
}
void operator1()
{
int i;
for(i=0;i<num;i++)
cout<<zuijian[i]<<" ";
cout<<yuanshimingti<<" "<<"真值"<<endl;
int a=1;
for(i=0;i<num;i++)
a=a*2;
int b=0,c[10]={0,0,0,0,0,0,0,0,0,0};
for(i=0;i<a;i++){
int d=b;
for(int j=0;j<num;j++){
c[j]=d%2;
d=(int)d/2;
}
for(int j=num-1;j>-1;j--){
cout<<c[j]<<" ";
}
b++;
string cc="0000000000";
for(int j=0;j<num;j++){
if(c[j]==1)
cc[j]='1';
else
cc[j]='0';
}
string aa;
aa=yuanshimingti;
for(int k=0;k<num;k++){
for(int j=0;aa[j]!=0;j++){
if(aa[j]==zuijian[k])
aa[j]=cc[num-k-1];
}
}
cout<<aa<<" "<<operator2(aa);
cout<<"\n";
}
}
char operator2(string chushi)
{
int a,b=0,k=0;
for(int i=0;chushi[i-1]!=')'&&chushi[i]!=0;i++){
if(chushi[i]==')')
b=i;
}
for(int i=0;chushi[i]!=')'&&chushi[i]!=0;i++){
if(chushi[i]=='(')
a=i;
}
if(b!=0){
for(int i=a+1;i<b;i++){
guodu[k]=chushi[i];
k++;
}
guodu[k]='\0';
char t;
t=operator2(guodu);
chushi[a]=t;
int z=a+1;
for(k=b+1;chushi[k-1]!=0;k++){
chushi[z]=chushi[k];
z++;
}
return operator2(chushi);
}
for(int i=0;chushi[i]!=0;i++){
if(chushi[i]=='!'){
if(chushi[i+1]=='1')
chushi[i+1]='0';
else
chushi[i+1]='1';
int z=i;
for(k=z+1;chushi[k-1]!=0;k++){
chushi[z]=chushi[k];
z++;
}
}
}
char c='1';
for(int i=0;chushi[i]!=0;i++){
if(chushi[i]=='+'){
if((chushi[i-1]=='1')||(chushi[i+1]=='1'))
chushi[i+1]='1';
else
chushi[i+1]='0';
}
if(chushi[i]=='^'){
if((chushi[i-1]=='1')&&(chushi[i+1]=='1'))
chushi[i+1]='1';
else
chushi[i+1]='0';
}
if(chushi[i+1]!=0)
c=chushi[i+1];
}
return c;
}
};
int main()
{
string a1;
cout<<"(合取用^代替,析取用+代替,命题变元用小写字母)"<<endl;
cout<<"请输入表达式:";
cin>>a1;
cout<<endl;
Gongshi gongshi1(a1);
gongshi1.operator1();
return 0;
}
|