检测文本文件中的特定字符串

时间:2013-07-17 15:12:12

标签: c++

我有一个带有html的大文本文件,我希望在每个“</b>”之后添加一个空格(在每个粗体字后面)

文本长度约为581 810

我不知道如何正确地做到这一点,我想尝试一下:

1 - 创建名为“v”的字符串向量

2 - 获取文本中的每一个字符(不知道怎么做,我可以得到行和单词,但我不知道如何获取字符)在这个向量中(带有回推和另一个字符串)< / p>

3-使用“for”循环检测每个“</b>”,如下所示:

for(int i = 0; i < 581810; i++)
{
    if (v[i] + v[i+1] + v[i+2] + v[i+3] == "</b>"){

      // add a space after </b> (don't know how to this)

    }
}

但我不知道在我的字符串向量中获取每个字符,我知道如何获取行,使用getline和带有“&gt;&gt;”的单词。我不能用文字来做这件事,因为html标签贴在

字样上

感谢

1 个答案:

答案 0 :(得分:0)

http://ideone.com/KZsyc6

没有做任何花哨的事情(正则表达式,shell命令),你可以这样做:

const std::string bTag("</b>");
std::string line;
size_t indexOfBTag=0;
for( ... ) //iterate through your file, line by line
{
  //populate line with current line from file via getline, up to you

  //store position of the b tag into indexOfBTag and make sure that theres a b tag in your line
  //make sure to search starting after the last BTag found, or this loop will never end
  //however, if the index is 0 (meaning the first search), dont bother adding the size
  //hence the find(..., indexOfBTag > 0 ? indexOfBTag + bTag.size() : 0)
  while((indexOfBTag = line.find(bTag, indexOfBTag > 0 ? indexOfBTag + bTag.size() : 0)) != std::string::npos) {
    line.insert(line.begin() + indexOfBTag + bTag.size(), ' ');
  }
}