📄 conseqdlg.cpp
字号:
start=head;
end=scur;
dohequ();
// replace();
/*plink=scur;
addchar2('(',1);
plink=head->pre;
addchar2(')',1);
start=scur;
end=head->pre;
dohequ();
*/
replace();
over();
}
void CconseqDlg::dohequ()
{
memset(result,0,sizeof(result));
resultfst=0;
char and[10][30];
char sv[30];
CListBox* pLB = (CListBox*)GetDlgItem(IDC_OUTPUT);
link* tolink=(link*)malloc(sizeof(link));
for( plink=end;plink!=head;)
{
int ll=resultfst;
link* svlink=(link*)malloc(sizeof(link));
if( plink->data=='(')
{
tolink=plink->pre;
link *cur=(link*)malloc(sizeof(link));
cur=plink->next;
memset(and,0,sizeof(and));
int andfst=0,andsec=0;
memset(sv,0,sizeof(sv));
int sfst=0;
int isand=0;
//将并存入and[][]中
for( ;cur->data!=')';) //如a V ( b V c A d V e A f V h)
{ ///将 c A d中的c,d放入and[0][]={c,d},
if( cur->data=='&') //e A f放入 and[1][]={e,f}
{
//pLB->AddString(CString(L"&&"));
isand=1; //下面的for将 b,h放入sv[]={a,f};
if( cur->pre->pre->data=='~' )
and[andfst][andsec++]=char( int(cur->pre->data)-32);
else
and[andfst][andsec++]=cur->pre->data;
cur=cur->next;
if( cur->data=='~' )
{
cur=cur->next;
and[andfst][andsec++]=char( int(cur->data)-32);
}
else
and[andfst][andsec++]=cur->data;
if( cur->next->data=='&')
{
while(cur!=end)
{
cur=cur->next;
if( cur->data=='&') continue;
if( cur->data=='v'|| cur->data==')' ) break;
else
{
// cur=cur->next;
if( cur->data=='~' )
{
cur=cur->next;
and[andfst][andsec++]=char( int(cur->data)-32);
}
else
and[andfst][andsec++]=cur->data;
}
}
}
// and[andfst][andsec]='\0';
andfst++;
andsec=0;
// break;
/* for( int i=0;i<andfst;i++)
{
CString sb=L"and:";
sb+=CString(CString(and[i]));
pLB->AddString(CString(sb));
}*/
}
else cur=cur->next;
}
for( svlink=plink;svlink->data!=')';svlink=svlink->next);
svlink=svlink;
svlink=cur;
CString tp=L":";
// tp+=CString(svlink->data);
// pLB->AddString(tp);
sfst=0;
//将与存入sv[]中
for(cur=plink->next;cur->data!=')';)
{
if( cur->data!='v' && cur->data!='&' && cur->data!='~' )
{
if ( cur->next->data=='v' || cur->next->data==')' )
{
if ( cur->pre->data=='v' || cur->pre->data=='(' )
sv[sfst++]=cur->data;
else if(cur->pre->pre->data=='v' || cur->pre->pre->data=='(')
sv[sfst++]=cur->data-32;
}
}
cur=cur->next;
}
/*CString s=L"andfst";
s+=(CString)(char)(andfst+65);
pLB->AddString(s);
s=L"sfts";
s+=(CString)(char)(sfst+65);
pLB->AddString(s);*/
if( andfst==1 && !sfst )
{
plink->data='!';
svlink->data='!';
delnot();
plink=tolink;
if( plink==head ) break;
else continue;
}
else if( isand )
{
// pLB->AddString((CString)(char)(andfst+65));
// pLB->AddString(CString(L"ened"));
// pLB->AddString(CString(end->data));
// pLB->AddString(CString(L"stat"));
// pLB->AddString(CString(start->next->data));
// tp=L"ai:";
// for( int i=0;i<andfst;i++)
// pLB->AddString(tp+CString(and[i]));
// tp=L"sv:";
// pLB->AddString(tp+CString(sv));
int len;
for( len=0;and[0][len]!='\0';len++);
int sj=0;
if( andfst==1)
for( int ss=0;ss<len;ss++)
result[resultfst++][0]=and[0][ss];
else if(andfst==2)
{
int sj=0;
int lenb;
for( lenb=0;and[1][lenb]!='\0';lenb++);
int lv=(len>=lenb)?len:lenb;
int lc=(len<=lenb)?len:lenb;
lv--;
lc--;
if( lv==lc )
{
for( int h=0;h<2;h++)
for( int ss=0;ss<=lv;ss++)
{
result[resultfst++][0]=and[0][ss];
// tp=L"resultadd:";
// tp+=(CString)(result[resultfst-1][0]);
// pLB->AddString(tp);
}
int sf=0;
// tp=L"reseultfst:";
// tp+=(CString)(char)(resultfst+48);
// pLB->AddString(tp);
int pp=ll;
for( sf=0;sf<2*lv;sf+=lv)
for( int ss=0;ss<=lc;ss++)
{
// tp=L"";
// tp+=(CString)(char)(sf+48);
// pLB->AddString(tp);
result[pp++][1]=and[1][ss];
// tp=L"re:";
// tp+=(CString)(result[pp-1][1]);
// pLB->AddString(tp);
}
}
else {
for( int h=0;h<2;h++)
for( int ss=0;ss<=lv;ss++)
if( lv==len) result[resultfst++][0]=and[0][ss];
else result[resultfst++][0]=and[1][ss];
int sf=0;
int pp=ll;
for( sf=0;sf<2*lv;sf+=lv)
for( int ss=0;ss<=lc;ss++)
if( lv==len) result[sf][1]=and[1][ss];
else result[sf][1]=and[0][ss];
}
}
} //只有并,直接去括号
//有并有与
if( sfst && isand)
{ int lens;
for( lens=0;sv[lens]!='\0';lens++);
for( int vv=ll;vv<resultfst;vv++)
{
int j=0;
while( result[vv][j]!='\0')j++;
for( int hv=0;hv<lens;hv++)
result[vv][j++]=sv[hv];
}
} //只有与,直接存入去
else if( !isand && sfst )
{
int lens;
for( lens=0;sv[lens]!='\0';lens++);
for( int ss=0;ss<lens;ss++)
result[resultfst][ss]=sv[ss];
resultfst++;
}
link * tmp=(link*)malloc(sizeof(link));
for( tmp=plink;tmp!=svlink->next;tmp=tmp->next)
tmp->data='!';
delnot();
plink=tolink;
for(;ll<resultfst;ll++)
{
addchar2(char(ll+49),2);
if( ll<resultfst-1 ) addchar2('&',1);
}
// for( int sh=0;sh<resultfst;sh++)
// pLB->AddString(L"result:"+CString(result[sh]));
// tp=L"ggg : ";
/* for( qlink=head->next;qlink!=head;qlink=qlink->next)
{
if( qlink->data=='v') tp+=L"∨";
else if( qlink->data=='>') tp+=L"->";
else if( qlink->data==',') tp+=L",";
else if( qlink->data=='(') tp+=L"(";
else if( qlink->data==')') tp+=L")";
else if( qlink->data=='&') tp+=L"∧";
else tp+=CString(qlink->data);
}
pLB->AddString(CString(tp));*/
plink=tolink;
// pLB->AddString(CString(L"plink"));pLB->AddString(CString(plink->data));
if( plink==head ) break;
}
else plink=plink->pre;
}
}
void CconseqDlg::replace()
{
CListBox* pLB = (CListBox*)GetDlgItem(IDC_OUTPUT);
link*tmp=(link*)malloc(sizeof(link));
for(plink=start->next;plink!=end;)
{
if( plink->n==1 )
{
int len=0;
int si=int(plink->data)-49;
while( result[si][len]!='\0') len++;
plink->data='!';
// plink->n=0;
addchar2('(',1);
tmp=plink;
for( int i=0;i<len;i++)
{
if( result[si][i]>='A' && result[si][i]<='Z')
{
addchar2('~',1);
addchar2(char((int)result[si][i]+32),1);
// result[si][i]=' ';
}
else if( result[si][i]>='a' && result[si][i]<='z')
{
addchar2(result[si][i],1);
// result[si][i]=' ';
}
else// if( result[si][i]!=' ')
addchar2(result[si][i],2);
if( i<len-1 )
addchar2('v',1);
}
addchar2(')',1);
delnot();
plink=tmp->next;
continue;
// break;
}
else plink=plink->next;
}
CString tp=L"化成合取式 : ";
for( qlink=head->next;qlink!=head;qlink=qlink->next)
{
if( qlink->data=='v') tp+=L"∨";
else if( qlink->data=='>') tp+=L"->";
else if( qlink->data==',') tp+=L",";
else if( qlink->data=='&') tp+=L"∧";
else if( qlink->data=='(') tp+=L"(";
else if( qlink->data==')') tp+=L")";
else tp+=CString(qlink->data);
}
pLB->AddString(CString(tp));
}
void CconseqDlg::over()
{
CListBox* pLB = (CListBox*)GetDlgItem(IDC_OUTPUT);
for( plink=head->next;plink!=head;plink=plink->next)
if( plink->data=='&')
plink->data=',';
else if( plink->data=='(' || plink->data==')')
plink->data='!';
int isagain=0;
delnot();
while(1)
{
isagain=0;
for( plink=head->next;plink!=head;)
{
char c=plink->data;
if ( c==','|| c=='~' || c=='v') plink=plink->next;
else
{
int flag=-1,flag1=-1;
if ( plink->pre->data=='~') flag=1;
else flag=0;
link* tmp=(link*)malloc(sizeof(tmp));
for( tmp=plink->next;tmp!=head;tmp=tmp->next)
if( tmp->data==',') break;
else if( tmp->data==c )
{
if( tmp->pre->data=='~') flag1=1;
else flag1=0;
if( flag ==0 && flag1==0 )
{
tmp->data='!';
tmp->pre->data='!';
isagain=1;
break;
}
else if( flag==1 && flag1==1 )
{
tmp->data='!';
tmp->pre->data='!';
tmp->pre->pre->data='!';
isagain=1;
break;
}
else flag1=-1;
}
if( isagain ) break;
if(plink==head||plink->next==head) break;
else plink=plink->next;
}
}
if( isagain ){ delnot(); continue;}
else
break;
}
CString tp=L"";
CString sp=L"";
for( qlink=head->next;qlink!=head;qlink=qlink->next)
{
if( qlink->data=='v') { tp+=L"∨";sp+='|';}
else if( qlink->data==',') { tp+=L","; sp+=',';}
else
{ tp+=CString(qlink->data);sp+=CString(qlink->data);}
}
pLB->AddString(L"化简得子句 : "+tp);
tp=L"";
UpdateData(true);
SetDlgItemTextW(IDC_INPUT,sp);
}
void CconseqDlg::addkuo()
{
for( plink=head->next;plink!=head;)
{
link* tmp=(link*)malloc(sizeof(link));
tmp=plink;
if( plink->data=='&')
{
link*cur=(link*)malloc(sizeof(link));
int flag=0;
int yes=0;
for(cur=plink->pre;cur!=head;cur=cur->pre)
{
if( flag==0)
{
if( cur->data==',' || cur->data=='v' )
{ yes=1;
break;
}
}
if( cur->data=='(' && flag!=0 ) break;
else if( cur->data==')') flag++;
else if( cur->data=='(')
{
flag--;
if( !flag )
break;
}
}
plink=cur;
if( flag) addchar2('(',1);
for(cur=tmp->next;cur!=head;cur=cur->next)
{
if( flag==0)
{
if( cur->data==',' || cur->data=='v' )
break;
}
if( cur->data=='(' && flag!=0 ) break;
else if( cur->data==')')
{
flag--;
if (!flag )break;
}
else if( cur->data=='(') flag++;
}
plink=cur;
addchar2(')',1);
plink=tmp->next;
if( plink==head || plink->next==head ) break;
}
else plink=plink->next;
}
CString tp=L"加入括号得: ";
for( plink=head->next;plink!=head;plink=plink->next)
{
if( plink->data=='v') tp+=L"∨";
else if( plink->data=='>') tp+=L"->";
else if( plink->data==',') tp+=L",";
else if( plink->data=='(') tp+=L"(";
else if( plink->data==')') tp+=L")";
else if( plink->data=='&') tp+=L"∧";
else tp+=CString(plink->data);
}
CListBox* pLB = (CListBox*)GetDlgItem(IDC_OUTPUT);
pLB->AddString(CString(tp));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -