1 N 布尔表达式翻译

  1. 必须加入#,并且#前需要有空格
  2. 初始化 tru=1,但是fal是100,因为fal+=2,那他应该到102,而不是到2
  3. 字符串读入
	getline(cin, s);
	s += " #";//记得加入结束标志  必须加个空格!让 # 独立出来
	stringstream ss(s);

	while (ss >> x)
  1. 注意for循环和for循环外什么更新什么不更新
  2. 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;
}
posted on 2025-12-12 11:44  Hoshino1  阅读(0)  评论(0)    收藏  举报