我仍然是c ++的新手,我需要编写一个类来读取cin的文本输入并根据'。'后面的字符格式化它。
..忽略第一个点并正常打印该行。<将指针指针返回到文档的开头,>将它移动到最后,.p移动到上一行,.n移动到下一行,.k删除当前行。
代码工作得很好,但是在使用.p命令后它仍然不受限制,我无法弄清楚如何修复它。
istream& operator>>(istream& in, Document& d) {
string S;
vector<string>::iterator point;
point = d.end();
while (in){
getline(in, S);
if (S[0] == '.'){
switch (S[1]){
case '.' : S.erase(0, 1); d.insert(d.end(), S+'\n'); point = d.end(); break;
case '<' : point = d.begin(); break;
case '>' : point = d.end(); break;
case 'p' : point--; break;
case 'n' : point++; break;
case 'k' : d.remove(point); break;
}
}
else if (point !=d.end()) {d.insert(point, S+'\n'); point++;}
else{d.insert(d.end(), S+'\n'); point=d.end();}
return in;
}
我认为它发生是因为它在istream中运行并且每个新行移动d.end()所以点增量传递它知道它是如何工作的?我仍然要把头包裹在迭代器周围,但是我觉得我一直在这里碰到我的头。
提前感谢您的帮助!