如果你是一个想转行c++的python学者(。又或是一个喜欢恶搞的c++学者。),这篇文章可能是自你知道c++开始最令人震惊的东西。
看看这个吧
#include <iostream>
#include <fstream>
#include <cstdlib>
int main() {
std::string py_code = R"(# -*- coding: gbk -*-
print("这是Python代码,由C++调用")
a = 100 + 200
print("计算结果:",a)
)";
std::ofstream tmp("temp.py");
tmp << py_code;
tmp.close();
int ret = std::system("py temp.py");
return ret;
}
想必无论你是学c++的还是学python的看到这个都有不少感触吧。

没错,你可以在c++编译器里写python代码。
#include <iostream>
#include <fstream>
#include <cstdlib>
int main() {
std::string py_code = R"(# -*- coding: gbk -*-
)";
std::ofstream tmp("temp.py");
tmp << py_code;
tmp.close();
int ret = std::system("py temp.py");
return ret;
}
这是c++框架,然后你只要在

里面写python代码就能直接运行。
这个东西有时候很好用,比如

这道题,很明显,是一道高精度。
众所周知,c++写高精度极为麻烦
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
const int MAXN = 505; // 最多500位,预留505防止进位多一位
int a[MAXN], b[MAXN], ans[MAXN];
string s1, s2;
int len1, len2, len_ans;
int carry; // 进位
int main()
{
// 1. 读取两个大数字字符串
cin >> s1 >> s2;
len1 = s1.size();
len2 = s2.size();
// 2. 逆序存入数组:下标0是个位
for (int i = 0; i < len1; i++)
{
a[i] = s1[len1 - 1 - i] - '0';
}
for (int i = 0; i < len2; i++)
{
b[i] = s2[len2 - 1 - i] - '0';
}
// 3. 逐位加法,循环到最长数字长度
carry = 0;
len_ans = max(len1, len2);
for (int i = 0; i < len_ans; i++)
{
int sum = a[i] + b[i] + carry;
ans[i] = sum % 10;
carry = sum / 10;
}
// 4. 处理最高位剩余进位
if (carry != 0)
{
ans[len_ans] = carry;
len_ans++;
}
// 5. 逆序输出(从最高位打印到个位)
for (int i = len_ans - 1; i >= 0; i--)
{
cout << ans[i];
}
cout << endl;
return 0;
}
但是python写这道题直接一行搞定
print(int(input()) + int(input()))
于是我们可以把这个放进我们的框架里。即
#include <iostream>
#include <fstream>
#include <cstdlib>
int main() {
std::string py_code = R"(# -*- coding: gbk -*-
print(int(input()) + int(input()))
)";
std::ofstream tmp("temp.py");
tmp << py_code;
tmp.close();
int ret = std::system("py temp.py");
return ret;
}
//哈哈,再也不会被学python的嘲笑啦
这可不是减少了一点点,万能框架一套,要写的其实也只有那一行。
接下来,我来讲一讲原理,这段代码其实是把python存入temp脚本,然后再启动 Python 解释器,运行刚刚生成的temp.py脚本。
所以运行完后,桌面上会多出一个 temp.py 。(可能要手动删除)
若运行发生错误,给出以下修复方案
1. 在程序最顶端加上
#include <string>
2. 若未安装python,见 python https://www.python.org/downloads/windows/ ,选择 3.10/3.11 稳定版,或者在应用商店安装。
3. 若程序依然无法运行,请检查python语法是否正确
4. 若仍运行出错,尝试将代码
int ret = std::system("py temp.py");
改为
int ret = std::system("python temp.py");
后再次运行。若程序显示

请立即改回
int ret = std::system("py temp.py");
6.若还是不行,本人也无能为力了
希望本文能为大家带来启发。本文到这里就结束了。感谢大家的浏览,若有补充,请在评论区指出。
1596



被折叠的 条评论
为什么被折叠?



