我使用以下代码解析html文档:
ifstream myfile("file.html");
string line;
int m_lines;
char c;
while(getline(myfile,line)) {
if(line.empty()) {
m_lines++;
continue;
}
istringstream iss(line);
while(iss.good()) {
c = iss.get();
//my code here (not important for this question)
cout << c;
}
m_lines++;
}
输入文件(file.html)如下所示:
<p>Lorem ipsum <strong>haha</strong> gfadf.</p>
<img src="image.jpg" alt="alt" />
输出:
<p>Lorem ipsum golo gama<strong>haha</strong> gfadf.</p> <img src="image.jpg" alt="alt" />
^
^
^
如果输入文件中有新行,则会打印空白字符。如何跳过或删除此字符?
答案 0 :(得分:1)
您的信息流中没有换行符,当调用getline
时,它会将字符提取到换行符。 iss.get()
正在返回文件结尾,因为无法提取更多字符。您可以使用以下代码进行检查:
while(iss.good()) {
c = iss.get();
if (c == std::char_traits<char>::eof())
{
cout << "end of file!";
}
else
{
cout << c;
}
}
答案 1 :(得分:0)
您可以简单地检查字符串中的最后一个字符是否为空白字符(例如\f\n\r\t\v
..)并将其删除。例如:
while (line.back() == '\s')
{
line.erase(line.end());
}
如果您没有使用c ++ 11(在c ++ 11中添加了.back()
)
while (line[line.size()-1] == '\s')
{
line.erase(line.end());
}
您可以在istringstream iss(line);
之前添加它,并删除所有尾随空白字符。