Я выполняю задание, которое читается в данных из текстового файла, и я должен помещать данные в вектор при фильтрации номеров, начинающихся с 0 и комментариев. У меня есть все, кроме фильтрации комментариев. То, что я имею в теории, должно работать, но у меня просто возникают проблемы с его исполнением. Это код проблемы:C++: Удаление комментариев из строки?
vector<string> nums_after;
for(int i = 0; i < nums_before.size(); i++)
{
string current = nums_before[i];
if (current.front() == '(')
{
current.erase(current.find("(*"), current.find("*)"));
}
if (current.front() == '0')
{
continue;
}
nums_after.push_back(current);
}
Мой пример файл выглядит следующим образом:.
101481
10974
1013
(* comment *)0
28292
35040
35372
0000
7155
7284
96110
26175
Но мой код фильтрует только на (* и даже не пропуска после звездочки Я думаю, что я просто возникли проблемы с объединением функций erase() и find(). У кого-нибудь есть предложения?
EDIT: Реализована моя проблема в том, что строка комментария разбивалась на три отдельные строки: (*, комментарий и *). 0. Теперь я подозреваю проблему с моей функцией getline. Вот что она выглядит s:
int main() {
string line;
string fileName;
cout << "Enter the name of the file to be read: ";
cin >> fileName;
ifstream inFile{fileName};
istream_iterator<string> infile_begin {inFile};
istream_iterator<string> eof{};
vector<string> nums_before {infile_begin, eof};
while (getline(inFile, line))
{
nums_before.push_back(line);
}
Это происходит прямо перед первым блоком кода.
Как вы должны обрабатывать что-то с вложенными комментариями? '10 03 (* 05 11 (* 10 03 *) 10 01 *) 03 100' требует разных методов разбора в зависимости от того, что говорят ваши инструкции. EDIT: Вы также разбираете целые числа? – druckermanly
Я должен избавиться от всего, что находится между комментариями, но текстовые файлы, которые моя программа должна обрабатывать, не имеют вложенных комментариев. –
Проверьте мой ответ. Вы должны знать, что стирание принимает начальную позицию и AMOUNT символов для стирания, а не конечную позицию - NOT '(begin, end)', но '(begin, end-begin)' - это приведет к удалению всех символов между 'begin' и 'end', но он не будет касаться найденных символов окончания, поэтому вам нужно добавить свой счет, 2 в вашем примере. – xinaiz