| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
一直在想那个格式问题究竟该怎么破?#include <iostream>
#include <cstdlib>
#include <cstdio>
#include<string>
using namespace std;
int count = 1;
bool expression_value (string s);
bool term_value(string s);
int main()
{
string s;
getline(cin,s,'\n');
char a[100]= {'\0'};int tot = 0;
for(int i = 0;i < s.length();++i)
{
if (s[i] != ' ')
{
a[tot++] = s[i];
}
}
s = string (a);
//去掉那个最大的括号(如果有的话)
if (s[0] == '(' && s[s.length() - 1] == ')')
{//还需要确认下 是不是左右括号匹配
int m = 0,flag = 0;
for (;m < s.length();++m)
{
if (s[m] == '(')flag ++;
if (s[m] == ')')flag --;
if (flag == 0)break;
}
if (m == s.length() - 1)//说明需要去除那个括号
{
string b = s.substr(1,s.length() - 2);//去除掉左边那个括号,左边的起始位置就应该是第1,长度为s.length() - 2;
s = b;//完成赋值
}
}
cout << "Expression "<<count <<":";
if (expression_value(s))cout <<'V';
else cout << 'F';
++count;
while (getline(cin,s,'\n'))
{//读入这个串
//将所有的空格都给删除掉
char a[100]= {'\0'};int tot = 0;
for(int i = 0;i < s.length();++i)
{
if (s[i] != ' ')
{
a[tot++] = s[i];
}
}
s = string (a);
//去掉那个最大的括号(如果有的话)
if (s[0] == '(' && s[s.length() - 1] == ')')
{//还需要确认下 是不是左右括号匹配
int m = 0,flag = 0;
for (;m < s.length();++m)
{
if (s[m] == '(')flag ++;
if (s[m] == ')')flag --;
if (flag == 0)break;
}
if (m == s.length() - 1)//说明需要去除那个括号
{
string b = s.substr(1,s.length() - 2);//去除掉左边那个括号,左边的起始位置就应该是第1,长度为s.length() - 2;
s = b;//完成赋值
}
}
cout <<endl<< "Expression "<<count <<":";
if (expression_value(s))cout <<'V';
else cout << 'F';
++count;
}
}
bool term_value(string s)
{
if (s[0] == '('){
return expression_value(s.substr(1,s.length() - 2));
}
if (s[0] == '!'){
return !term_value(s.substr(1,s.length() - 1));
}else if(s[0] == 'V')return true;
else if (s[0] == 'F')return false;
}
bool expression_value(string s)
{
int k = 0,flag2 = 0;
for (k = 0;k < s.length();++k){
if (s[k] == '(')++flag2;
else if (s[k] == ')')--flag2;
if (flag2 == 0&& (s[k] =='&'|| s[k] == '|'))break;
}
bool result = term_value(s.substr(0,k));//如果是不含有 & 或 |运算式子就可以使得k = s.length那么就相当于完全开始了
if (k == s.length())return result; //k就是这个运算符的位置
int x = k + 1,len = 0;//一个记录左值 一个记录长度,用来使用substr(x,l);
int oper;
if (s[k] == '|')oper = 1;
else oper = 0;
int flag = 0;//flag == 1,表示这个等式的位置在里面
for(int i = x;i < s.length();++i){
if (s[i] == '(')++flag;
else if (s[i] == ')')--flag;
if (flag == 0&& (s[i] =='&'|| s[i] == '|')){//flag == 0
bool value = term_value(s.substr(x,len));
if (oper == 0){
result &= value;
}else result |= value;
if (s[i] == '&')oper = 0;
else oper = 1;
x = i + 1;
len = 0;
}else ++len;
}
if (x <= s.length() - 1)
{
bool value = term_value(s.substr(x));
if (oper == 0)
{
result &= value;
}else result |= value;
}
return result;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator