在html文件中寻找

时间:2016-01-05 19:47:40

标签: html c++ file

所以我需要找到一个短语"<table"(没有&#34;&gt;&#34;),它位于html文件中一行的开头。这是我的代码的一部分:

char table[7];
string scrap;
while(ifs.tellg()!=-1)
{

    for(int i=0; i<6; i++)
    {
        ifs.get(c);
        table[i]=c;
    }

    if(!strcmp("<table",table))
    {
        cout<<"Table found";

    }
    else
    {
        getline(ifs,scrap);

    }

如果<table处于文件的乞讨位置,那么它可以正常运行,但当它在第100行左右时,它就不会#39;吨。我认为这可能是因为它需要新行字符并将其放在表数组中,例如而不是表格"<table" its "\n<tabl"

我能做什么才能这样做?

2 个答案:

答案 0 :(得分:1)

只需使用class MemberDomainObject extends DomainObject { public function checkPassword( $dataMapperPassword, $locallyStoredPassword ) { if ( $dataMapperPassword !== $locallyStoredPassword ) return false; return true; } } 中的find方法即可。您可以找到它的文档here

例如,您可以执行以下操作(假设std::stringifs)。

istream

答案 1 :(得分:0)

当前的算法是以6个字节的块搜索:

for(int i=0; i<6; i++)
{
    ifs.get(c);
    table[i]=c;
}

所以,如果<table从pos 2开始(例如在2个空格或标签之后),你会跳过它。

此外,几个html文件甚至不使用换行符,因此在<table之前可能存在各种数据。或者甚至在使用换行符时,<table不能保证是该行中的第一个标记。

即使您在行的最开始搜索<table,也要考虑如果有一个空行会发生什么:getline(ifs,scrap);会让您到达下一行,如果该行(和可能以下一个是空的,get(c)将返回换行符(如果\r\n则返回2)。

我认为你应该在每一行中使用字符串搜索,但是如果文件很大并且没有使用换行符,那么扫描整个文件可能会更好,而不是扫描行。但是,不是比较每个6字节块,而是首先扫描<,如果找到,则比较后面的字节等。(或使用类似Boyer–Moore的算法)。

例如,您可能还需要注意(跳过)<table内部的评论。