2015-03-13 56 views
0

我试图打印包含在字符串中的所有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); 
     } 
    } 
+3

您应该使用HTML或XML解析器,这样你就不会浪费时间调试功能。 – 2015-03-13 17:09:55

+3

我怀疑你的问题在于涉及'!'和'=='的比较。 例如,你的while循环......你真的打算'!fileline.length()== 0'吗?或者,也许你真的想'fileline.length()!= 0'甚至'!(fileline.length()== 0)'。 正如你写的那样,当长度为零时,'!fileline.length()'将被评估为真,当长度不为零时则被评为假。比较真正的== 0将是错误的,假== 0将是真实的......混乱,不是吗? 如果您的意思是检查长度不为零,则使用不等于运算符:'!=' – 2015-03-13 17:11:19

+0

如果您只想搜索模式'<[^<>] *>',则正则表达式可以提供帮助。但是,这也会报告评论内的事件并且不会验证任何内容。如果您需要更多功能,请使用上面建议的专用库。 – 5gon12eder 2015-03-13 17:15:01

回答

2

我怀疑你正在被操作符优先级绊倒。该生产线

while(!fileLine.length()==0) 

相当于

while((!fileLine.length()) == 0) 

什么,你可能是指做的是:

while(!(fileLine.length() == 0)) 

可以简化到:

while(!fileLine.empty()) 

同样,变化该行

while(!fileLine.at(0)=='>') 

while (fileLine.at(0) != '>') 
+2

此外,行:'while(!fileLine.at(0)=='>')'可能会有类似的问题。 – 2015-03-13 17:29:05

+0

这似乎是问题所在,也表明我正在使用erase()方法不当。 – mrphrozenphoenix 2015-03-13 17:51:06