所以我需要找到一个短语"<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"
。
我能做什么才能这样做?
答案 0 :(得分:1)
只需使用class MemberDomainObject extends DomainObject
{
public function checkPassword( $dataMapperPassword, $locallyStoredPassword )
{
if ( $dataMapperPassword !== $locallyStoredPassword )
return false;
return true;
}
}
中的find
方法即可。您可以找到它的文档here。
例如,您可以执行以下操作(假设std::string
为ifs
)。
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
内部的评论。