如何从文件中读取,直到到达特定字符,然后查找到下一个字符,并在C++中继续读取。
在我的程序中,我使用了一些HTML语法并生成了一个.htm文件……所以在我的C++代码中,我添加了标签。
但是当我从我的.htm文件中读取时,我希望它不包含标签。
我计划做的是读取该文件,直到遇到'<',然后找到切入点,直到遇到'>',然后继续从那里读取。
发布于 2012-04-02 23:41:19
首先,你应该意识到,正确地做这件事比你显然认为的要棘手得多。
就像你问的那样回答问题,你可以使用istream::get一次读取一个字符,直到得到一个'<‘。您可以使用ignore忽略流中直到下一个'>‘的字符。
然而,回到第一点,这通常不会正确工作。特别是,完全有可能一个标记包含一个字符串,而该字符串(反过来)包含一个不是标记结束的'>‘。因此,要希望正确地解析HTML,您需要解析标记中的字符串,当您找到它们时,跳过它们的内容,而不是将它们可能包含的任何'>‘视为结束标记。
发布于 2012-04-02 23:41:05
通常,要读取文件直到到达特定字符,您可以使用std::getline,并将第二个参数设置为终止符,因此,如果您一直读取到'<‘字符,则可以这样做
std::getline( infile, str, '<' );然后,您可以对>字符执行相同的操作
在您的例子中,如果您正在解析HTML,那么可能已经有了针对它的特定解析器。我认为HTML1.1是XML兼容的,但HTML1.0并不是,因为它并不总是必须关闭所有的标记,所以XML解析器不一定工作。
您需要假设开始和结束标记不是注释或引用文本的一部分,而我上面描述的方法不能保证您做到这一点,因此您需要一个完整的状态机。
发布于 2012-04-02 23:35:38
以下是一些指导原则。
您可以使用std::string
getLine逐行读取文件,并将每行保留在ifstream中characters.std::string.find()方法查找<和> std::vector.可以使用std::string.substr()方法获取substrings.
std::vector.中对字符串进行分组
您不会在这里获得完整的实现,但这应该足以让您入门。
https://stackoverflow.com/questions/9979247
复制相似问题