如何读取c ++程序直到读取字符然后跳过一些字符并继续读取

ark*_*ark 4 c++ file file-handling

如何从文件中读取直到达到特定字符,然后寻找下一个字符并继续用c ++读取.

在我的程序中我使用一些HTML语法并生成一个htm文件...所以在我的c ++代码中我添加了标签...但是当我从我的htm文件中读取时,我希望它不包含标签.

我打算做的是读取文件,直到遇到'<'然后只是寻找直到遇到'>'并从那里继续阅读.

请帮帮我,指导我..我对c ++中的文件输入输出不是很有经验..谢谢.. :)

Cas*_*Cow 5

通常,要读取文件直到到达特定字符,可以使用std::getline第二个参数设置为终止符,这样,如果要读取直到直到'<'字符,就可以

std::getline( infile, str, '<' );
Run Code Online (Sandbox Code Playgroud)

然后,您可以对>角色进行相同操作

就您而言,如果您要解析HTML,则可能已经有特定的解析器了。我认为HTML1.1是XML兼容的,但HTML1.0不是,因为并非总是必须关闭所有标签,因此XML解析器不一定有效。

您将需要假设打开和关闭标签不是注释或带引号的文本的一部分,并且上述方法不会向您保证,因此您需要一个完整的状态机。


Jer*_*fin 5

首先,您应该意识到正确地执行此操作比您显然想的要复杂得多.

只要按照你的要求回答这个问题,就可以istream::get一次读取一个字符,直到你得到一个'<'.您可以使用ignore忽略流中下一个">"的字符.

然而,回到第一点通常无法正常工作.特别是,标签完全可以包含一个字符串,而字符串(依次)包含一个不是标签结尾的">" .因此,为了正确解析HTML,您需要解析标记内的字符串,当您找到它们时,跳过它们的内容而不是将它们可能包含的任何">"视为标记的结尾.

  • 根据[W3c](http://www.w3.org/TR/html-markup/syntax.html#normal-character-data),普通文本不能包含“ &lt;”字符,但我认为没有这种限制在“&gt;”上。 (2认同)