我正在做一個從文本文件中讀取數據的任務,我必須將數據放入一個向量中,同時過濾掉以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