我正在做一个从文本文件中读取数据的任务,我必须将数据放入一个向量中,同时过滤掉以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
但我的代码只在星号后过滤掉(*甚至没有空格我想我(*,comment和*),我的问题是注释行被分解成三个单独的行:(*,comment和*)。 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'需要不同的解析方法,具体取决于您的指示说什么。编辑:你也只解析整数? – druckermanly
我应该摆脱评论之间的任何内容,但我的程序应该能够处理的文本文件没有嵌套评论 –
请检查我的答案。你需要知道,擦除需要开始位置和AMOUNT字符擦除,而不是结束位置 - 不是'(开始,结束)',而是'(开始,结束 - 开始)' - 这将删除'begin'之间的所有字符和'end',但它不会碰到找到的结尾字符,所以你需要在你的例子中添加它们的数量2。 – xinaiz