poj 2106

注意在deal函数中!!!(V|F)这样的调用,不能直接return(dfs());

注意理解在 ‘)’ 这个的出现;

三目运算符的运用;

还是阳哥的代码简单啊 !!!刚开始自己思考,然后看了一点点阳哥代码,之后我但是还是出错,最后再多看了一点,发现自己的错误,然后自己慢慢调试,自己写代码,改动,(注意递归代码的调试方法);


#include<stdio.h>
#include<string.h>

char str[1005];
int leng;
int pos;

int dfs(char a[]);

int deal(char tempstr[])
{
if(tempstr[pos]=='('){
pos++;
return dfs(tempstr);
}
if(tempstr[pos]=='!'){
pos++;
return !(deal(tempstr));
}
if(tempstr[pos]=='V')
return 1;
if(tempstr[pos]=='F')
return 0;
}

int dfs(char a[])
{
int temp=deal(a);
pos++;

int temp2;
char tempchar;
for(;pos<leng&&((a[pos]=='|')||(a[pos]=='&'));){
tempchar=a[pos];

pos++;
temp2=deal(a);
pos++;

temp=(tempchar=='|'?(temp||temp2):(temp&&temp2));
//printf("%d***\n",temp);

}
return temp;
}


int main()
{
int countt=0;
while(gets(str))
{

int len=strlen(str);
int k=0;

for(int i=0;i<len;i++)
{
if(str[i]!=' ')
str[k++]=str[i];
}
str[k]='\0';
leng=strlen(str);
pos=0;
int ans=dfs(str);

printf("Expression %d: %c\n",++countt,ans==1?'V':'F');
}
return 0;
}


你可能感兴趣的:(poj 2106)