我正在尝试解决Thinking in C++ 中的练习 22(第 4 章),但我缺少一些东西,因为经过几天的工作,我的解决方案也无法完成工作。我不太喜欢在解决练习中寻求帮助,但此刻我感到不知所措。
创建一个包含 Stashes 的堆栈。每个 Stash 将保存来自输入文件的五行。使用 new 创建 Stashes。将文件读入您的堆栈,然后通过从堆栈中提取它以原始形式重新打印它。
#include "CppLib.h"
#include "Stack.h"
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
//typedef unsigned int uint;
int main() {
ifstream in("main.cpp");
Stack stackStashes;
stackStashes.initialize();
Stash linesStash;
linesStash.initialize(sizeof(char) * 80);
string line;
bool flag = true;
while (flag) {
for (int i = 1; flag && (i <= 5); i++)
if ((flag = (bool)getline(in, line)))
linesStash.add(line.c_str());
if (flag) {
stackStashes.push(new Stash(linesStash));
linesStash.cleanup();
linesStash.initialize(sizeof(char) * 80);
}
}
Stash* s;
char* cp;
int z = 0;
while ((s = (Stash*)stackStashes.pop()) != 0) {
while ((cp = (char*)s->fetch(z++)) != 0)
cout << "s->fetch(" << z << ") = "
<< cp << endl;
delete s;
}
s->cleanup();
stackStashes.cleanup();
return 0;
}
我试图用向量解决它,而不使用标志,我的所有解决方案都返回了错误。此外,在我所有的实验中,这是最糟糕的一个,但也是唯一剩下的一个。
以下是本书提供的库。下面的所有代码都是由 Bruce Eckel 编写的。
CppLib.cpp,CppLib.h,Stack.cpp,Stack.h,require.h。