Я все еще очень плохо знаком с 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 (), поэтому приращение точки проходит там, где он знает, так ли это работает?Я все еще должен обернуть голову вокруг итераторов, но определенно чувствую, что я воткнулся головой в стену здесь.
Заранее благодарю за любую помощь!