gpt4 book ai didi

c - 如何测试标准输入是否以某个单词开头?

转载 作者:太空宇宙 更新时间:2023-11-04 01:58:22 24 4
gpt4 key购买 nike

我正在编写一个 C 程序来解析一些可能有两个不同版本的输入文件。我需要能够在解析文件时推断出文件格式。

第一个版本只是一个数字列表,每行一个:

123
456
789

第二种类型的文件每行有两个数字,顶部有一行标记它是文件格式的最新版本

#version 2
123 10
456 20
789 30

测试它的最简单方法是什么?我正在阅读的文件以 "#version N" 行开头?如果版本行存在,我想使用它,如果不存在,那么我不想使用输入流中的任何字符。

问题是我想我需要一些方法来处理未读字符,而我只知道 ungetc,它只适用于单个字符而不适用于整行。

最佳答案

我不确定我是否理解您的问题。似乎您只需要 ungetc(),因为您可以跳过空格,直到看到数字或 #,然后您就会知道哪个文件是哪个。然而你觉得你需要更多,我不知道你为什么会有这种感觉。

您可以编写一个“分词器”,将输入解析为标记,然后让您的处理代码使用这些标记。然后,您只需再次查看第一个标记指针即可“倒带”。

这是一个很好的分工:您可以让分词器处理跳过空格、跳过注释,甚至可以处理 #include 指令。您可以读取一行,让分词器将其拆分为空白,然后将指针传递给该行中的每个单词,以供其余代码使用。

或者如果您希望程序尽可能灵活,您可以使用 malloc() 为输入的每个标记分配一个缓冲区。我以这种方式编写了简单的编译器,因为我希望能够在标记级别“倒带”以查看在其他内容之前发生了什么。输入文件被转换为标记的链接列表,我能够查看当前标记之前和之后的内容,以尝试从上下文中找出答案。

关于c - 如何测试标准输入是否以某个单词开头?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30610027/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com