我试图打印包含在字符串中的所有html标签。在这里,代码的逻辑似乎有错误,我一直在得到一个永无止境的循环。从字符串中打印出HTML标签
string fileLine;
string strToPush;
fileLine ="<html> sdad </b>as"; // My string that I want to find tags from
cout << fileLine << '\n';
while(!fileLine.length()==0)
{
if(fileLine.at(0)=='<')
{
strToPush = "";
while(!fileLine.at(0)=='>')
{
strToPush = strToPush + fileLine.at(0);
fileLine.erase (0);
}
cout << endl << "HTML Tag detected: " << strToPush <<endl;
}
else
{
fileLine.erase (0);
}
}
您应该使用HTML或XML解析器,这样你就不会浪费时间调试功能。 – 2015-03-13 17:09:55
我怀疑你的问题在于涉及'!'和'=='的比较。 例如,你的while循环......你真的打算'!fileline.length()== 0'吗?或者,也许你真的想'fileline.length()!= 0'甚至'!(fileline.length()== 0)'。 正如你写的那样,当长度为零时,'!fileline.length()'将被评估为真,当长度不为零时则被评为假。比较真正的== 0将是错误的,假== 0将是真实的......混乱,不是吗? 如果您的意思是检查长度不为零,则使用不等于运算符:'!=' – 2015-03-13 17:11:19
如果您只想搜索模式'<[^<>] *>',则正则表达式可以提供帮助。但是,这也会报告评论内的事件并且不会验证任何内容。如果您需要更多功能,请使用上面建议的专用库。 – 5gon12eder 2015-03-13 17:15:01