1 N 布尔表达式翻译
- 必须加入#,并且#前需要有空格
- 初始化 tru=1,但是fal是100,因为fal+=2,那他应该到102,而不是到2
- 字符串读入
getline(cin, s);
s += " #";//记得加入结束标志 必须加个空格!让 # 独立出来
stringstream ss(s);
while (ss >> x)
- 注意for循环和for循环外什么更新什么不更新
- if判断最后要clear和判断#break
1212一刷
#include<bits/stdc++.h>
using namespace std;
vector<string> v;
int fal = 100; // 初始值要和 num 一样,或者根据逻辑设为起始行号
int tru = 1;//最开始true=1;
int num = 100;
string s;
string x;
int main()
{
getline(cin, s);
s += " #";//记得加入结束标志 必须加个空格!让 # 独立出来
stringstream ss(s);
while (ss >> x)
{
if (x == "or" || x == "#")
{
if (x == "or")
fal += 2;
else
fal = 0;
int len = v.size();
for (int i = 0;i < len - 3;i += 3)
{
printf("%d(j%s,%s,%s,%d)\n", num, v[i + 1].c_str(), v[i].c_str(), v[i + 2].c_str(), num + 2);
num++;
printf("%d(j,_,_,%d)\n", num, fal);
fal = num++;
}
printf("%d(j%s,%s,%s,%d)\n", num, v[len - 2].c_str(), v[len - 3].c_str(), v[len - 1].c_str(), tru);
tru = num++;
printf("%d(j,_,_,%d)\n", num, fal);//注意什么时候写fal什么时候写tru
num++;
if (x == "#")break;
v.clear();
}
else if (x == "and")
fal += 2;
else
v.push_back(x);
}
return 0;
}
点击查看代码
#include<bits/stdc++.h>
using namespace std;
string str, x;
int num = 100, True = 1, False = 100;// 序号、真、假
vector<string>v;
//a < b or c < d and e < f
int main()
{
//cin >> str; 无法输入空格
getline(cin, str);
str += " #"; // 自己额外加的一个结束标志
stringstream strr(str);//
while (strr >> x) {// 以空格为分割点,将str中的字符(串)赋给x
if (x == "or" || x == "#") {
if (x == "or") False += 2; //如果是or不会直接失败,还需要判断后面
else False = 0;
int len = v.size();
//这里是i+=3
for (int i = 0; i < len - 3; i += 3) {
printf("%d(j%s,%s,%s,%d)\n", num, v[i + 1].c_str(), v[i].c_str(), v[i + 2].c_str(), num + 2);// 真链
num++;
printf("%d(j,_,_,%d)\n", num, False);// 假链
False = num++;//先赋值后自增
}
//处理最后一个表达式 因为是索引所以-1
printf("%d(j%s,%s,%s,%d)\n", num, v[len - 2].c_str(), v[len - 3].c_str(), v[len - 1].c_str(), True);
True = num++; //给true赋值,然后num自增
printf("%d(j,_,_,%d)\n", num, False);
num++;
v.clear();
if (x == "#") break;// 读到结束符停止
}
else if (x == "and") False += 2; //1 and 2 1错了直接检查2 ,+2;
else v.push_back(x);
}
return 0;
}