首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在读取字符之前从文件中读取,然后跳过某些字符并再次继续读取

如何在读取字符之前从文件中读取,然后跳过某些字符并再次继续读取
EN

Stack Overflow用户
提问于 2012-04-02 23:33:10
回答 4查看 38K关注 0票数 5

如何从文件中读取,直到到达特定字符,然后查找到下一个字符,并在C++中继续读取。

在我的程序中,我使用了一些HTML语法并生成了一个.htm文件……所以在我的C++代码中,我添加了标签。

但是当我从我的.htm文件中读取时,我希望它不包含标签。

我计划做的是读取该文件,直到遇到'<',然后找到切入点,直到遇到'>',然后继续从那里读取。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-04-02 23:41:19

首先,你应该意识到,正确地做这件事比你显然认为的要棘手得多。

就像你问的那样回答问题,你可以使用istream::get一次读取一个字符,直到得到一个'<‘。您可以使用ignore忽略流中直到下一个'>‘的字符。

然而,回到第一点,这通常不会正确工作。特别是,完全有可能一个标记包含一个字符串,而该字符串(反过来)包含一个不是标记结束的'>‘。因此,要希望正确地解析HTML,您需要解析标记中的字符串,当您找到它们时,跳过它们的内容,而不是将它们可能包含的任何'>‘视为结束标记。

票数 5
EN

Stack Overflow用户

发布于 2012-04-02 23:41:05

通常,要读取文件直到到达特定字符,您可以使用std::getline,并将第二个参数设置为终止符,因此,如果您一直读取到'<‘字符,则可以这样做

代码语言:javascript
复制
std::getline( infile, str, '<' );

然后,您可以对>字符执行相同的操作

在您的例子中,如果您正在解析HTML,那么可能已经有了针对它的特定解析器。我认为HTML1.1是XML兼容的,但HTML1.0并不是,因为它并不总是必须关闭所有的标记,所以XML解析器不一定工作。

您需要假设开始和结束标记不是注释或引用文本的一部分,而我上面描述的方法不能保证您做到这一点,因此您需要一个完整的状态机。

票数 8
EN

Stack Overflow用户

发布于 2012-04-02 23:35:38

以下是一些指导原则。

您可以使用std::string

  • You中的
  • 使用getLine逐行读取文件,并将每行保留在ifstream中characters.
  • You可以使用std::string.find()方法查找<> std::vector.

可以使用std::string.substr()方法获取substrings.

  • You可以根据需要在std::vector.

中对字符串进行分组

您不会在这里获得完整的实现,但这应该足以让您入门。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9979247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档