我在C++編程,我不知道如何實現以下目標:的std :: stringstream的閱讀int和字符串,字符串中的
我複製一個文件流內存(因爲有人問我到,我寧願從流中讀取),然後嘗試訪問它的值以將它們存儲到字符串和int變量中。
這是爲了創建一個解釋器。我試圖解釋的代碼是(ie):
10 PRINT A
20 GOTO 10
這只是一個簡單的示例代碼。現在,這些值將首先存儲在「地圖」結構中,然後在所有內容都將被「解釋」時訪問。 要被存儲的值是:
INT // lnum緩衝區裏的行數
串CMD //命令(PRINT和GOTO)在這種情況下
串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;
}
我希望這是顯而易見的。
謝謝你的幫助。
瓦萊里奧
+1提到解析器生成器。 – asveikau 2009-12-10 19:00:12