C++ 文本编辑问题

C++ 文本编辑问题,c++,string,text,C++,String,Text,我正在逐行遍历一个文本文件,调整文本,使文件最终匹配在MIPS模拟器(MARS)上运行所需的语法。我的问题是,每当我看到一行中有字符串“blezl”,我就想做几件事。首先,我需要在包含这个单词的行之后插入一些文本行。使用insert很容易。然后,我必须在最初紧跟找到的行之后的行后面插入一些文本行。问题是,我需要在整个文档中搜索位于找到的字符串末尾的字符串,然后在包含找到的第二个字符串的任何行之前插入几行。所以 #1 blezl v0,#10 #2 addu s1,s0,s5 #3 l

我正在逐行遍历一个文本文件,调整文本,使文件最终匹配在MIPS模拟器(MARS)上运行所需的语法。我的问题是,每当我看到一行中有字符串“blezl”,我就想做几件事。首先,我需要在包含这个单词的行之后插入一些文本行。使用insert很容易。然后,我必须在最初紧跟找到的行之后的行后面插入一些文本行。问题是,我需要在整个文档中搜索位于找到的字符串末尾的字符串,然后在包含找到的第二个字符串的任何行之前插入几行。所以

  #1 blezl v0,#10
  #2 addu s1,s0,s5
  #3 lw v1,0(s8)
  ...
  #10 addu s1,s0,s5

我需要找到“blezl”,然后在“#1”和“#2”之间插入一些行。然后我在“#2”和“#3”之间插入一些行,然后我需要在整个文档中搜索“#10”,当我找到任何行时,我会在它前面插入一些行。问题是,最后一步需要搜索整个文档(在逐行遍历的过程中,直到找到blezl为止)。这是因为“#10”可能出现在“#1”之前或之后的任何地方。这将花费很长时间(我的文件中有80k行,其中大约2%的行中有“blezl”)如何在没有大量冗余步骤的情况下执行此操作?

80k行不够大,您无法将其加载到RAM中。一旦ram中有数据,搜索就会相当快


如果您关心性能,可以基于标签创建一个b树来存储行。这将为需要查找的每一行提供日志(n)搜索时间。

我想也许可以使用第一个字符作为键,使用迭代器作为数据元素来填充映射。然后,如果需要,我可以在逐行遍历时进行快速搜索。当然,这将提供相同的性能,并且可能更容易实现。