我正在用 C++ 编程,但不确定如何实现以下目标:
我正在将文件流复制到内存中(因为有人要求我这样做,我更喜欢从流中读取),然后尝试访问它的值以将它们存储到字符串和 int 变量中。
这是为了创建一个解释器。我将尝试解释的代码是(即):
10 PRINT A
20 GOTO 10
这只是一个简单的示例代码。现在这些值将首先存储在“映射”结构中,稍后在“解释”所有内容时访问。要存储的值是:
int lnum // 行号
string cmd // 命令(PRINT 和 GOTO)
string exp // 表达式(在本例中为 A 和 10,但可以包含 (a*b)-c 之类的表达式)
问题给出了以下代码,我如何访问这些值并将它们存储在内存中?exp 字符串的大小也是可变的(可以只是一个变量或一个表达式),所以我不确定如何读取它并将其存储在字符串中。
代码:
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
#include <cstring>
#include <map>
#include <sstream>
using namespace std;
#include "main.hh"
int main ()
{
int lenght;
char *buffer;
// get file directory
string dir;
cout << "Please drag and drop here the file to interpret: ";
getline (cin,dir);
cout << "Thank you.\n";
cout << "Please wait while your file is being interpreted.\n \n";
// Open File
ifstream p_prog;
p_prog.open (dir.c_str());
// Get file size
p_prog.seekg (0, ios::end);
lenght = p_prog.tellg();
p_prog.seekg(0, ios::beg);
// Create buffer and copy stream to it
buffer = new char[lenght];
p_prog.read (buffer,lenght);
p_prog.close();
// Define map<int, char>
map<int, string> program;
map<int, string>::iterator iter;
/***** Read File *****/
int lnum; // line number
string cmd; // store command (goto, let, etc...)
string exp; // to be subst with expr. type inst.
// this is what I had in mind but not sure how to use it properly
// std::stringstream buffer;
// buffer >> lnum >> cmd >> exp;
program [lnum] = cmd; // store values in map
// free memory from buffer, out of scope
delete[] buffer;
return 0;
}
我希望这很清楚。
谢谢您的帮助。
瓦莱里奥