我正在尝试从网站中提取源代码片段,现在我想在每行中的标记之前删除所有空格和制表符。所以我把字符串复制到了一个字符串,现在我用每个行检查每个字符(也尝试过' \ t'''),直到有一些其他字符如&# 39;<'在计算有多少空格和标签时,哪一个并不重要。随后我创建了另一个char并将分隔符(行)写入其中,但在那里我只是跳过空格(使用[chars + i])。这种方法效果很好,但问题是如果有超过5个标签,那么它就不能正常工作。我完全不知道故障在哪里。
for(int i = 0;i < lines;i++){
getline(codefile, buf);
char *separator = new char[buf.size()+1];
separator[buf.size()] = 0;
memcpy(separator,buf.c_str(),buf.size());
int chars = 0;
for(int j = 0; j <= sizeof(separator); j++){
if(isspace(separator[j])){
chars++;
}
else{
break;
}
}
char *newbuf= new char[buf.size()-chars+1];
newbuf[buf.size()-chars] = 0;
for(int k = 0; k <= buf.size()-chars+1; k++){
newbuf[k] = separator[chars+k];
}
if(i > lcounter){
cout << newbuf << i << endl;
}
}
以下是该网站的源代码片段。您可以在图像标签,结束图标签和p标签上看到它。他们有超过5个标签(对不起,我必须审查它)。
<div class="xxx">
<article class="xxx" data-id="0">
<a href="link" class="tile" style="background-image:url('x.jpg');background-position:left center" data-more="<a href=x" data-clicks="<i class="fa fa-eye"></i>" data-teaserimg="x.jpg">
<time datetime="2015">
<span>2015</span>
</time>
<h1 class="title">
<span>x</span>
</h1>
<div class="x">x</div>
<div class="x">x</div>
<div class="x">
<figure class="x">
<img src="x.jpg" width="1" height="1" alt="">
</figure>
<p>
<strong>x</strong>xxx
</p>
</div>
</a>
抱歉,我无法发布图片,希望这是可以理解的。
答案 0 :(得分:0)
sizeof(separator)
应为strlen(separator)
sizeof是separator
变量的大小,而不是字符串的长度。由于separator
是char*
,因此这是四个字节。现在,您知道为什么当您有超过五个标签时,您的代码无法正常工作吗?
正如其他人指出的那样,没有理由将字符串复制到分隔符数组中。为什么不检查它们所在的角色? isspace(buf[j])
与isspace(separator[j])
一样有效。