我无法从我拥有的矢量类型字符串中删除某些索引。我的任务是填充带有html标签的向量(html,head等),但我需要摆脱没有匹配的标签(假设只有p,br,img)。每次我在for循环后打印矢量时,我得到一个流浪的br和p。非常感谢帮助!
for (int i = 0; i < tagStorage.size(); i++) {
if (tagStorage[i].find_first_of('/') == true) { //searches for closing tags
closingTags.push_back(tagStorage[i]);
}
else if (tagStorage[i].find("<p>") != string::npos) { //searches for <p> tag
noMatch.push_back(tagStorage[i]);
tagStorage.erase(tagStorage.begin() + i); //erase tag
}
else if (tagStorage[i].find("<br>") != string::npos) { //searches for <br> tag
noMatch.push_back(tagStorage[i]);
tagStorage.erase(tagStorage.begin() + i); //erase tag
}
else if (tagStorage[i].find("<img") != string::npos) { //searches for <img ..> tag
noMatch.push_back(tagStorage[i]);
tagStorage.erase(tagStorage.begin() + i); //erase tag
}
else {
openingTags.push_back(tagStorage[i]);
}
}
答案 0 :(得分:2)
在删除当前元素后,您将迭代超过下一个预期的tagStorage
元素。
例如,假设您要删除所有&#39; l&#39;来自&#34;您好!&#34;
"Hello!"
^
我+ +
"Hello!"
^
我+ +
"Hello!"
^
删除&#39; l&#39;。
我+ +
"Helo!"
^
正如您所看到的,删除&#39; l&#39;之后的迭代走到下一个角色。解决方法是在删除元素后递减i
,以便补偿for循环增量。