0

我有一个程序要求我从单词 N 开始,散列下一个 N+M 单词(连接并通过另一个函数完成,因此原始指针不会移动),然后将指向 N 的 FILE 指针递增到下一个单词。

我认为这样做的唯一方法是增加 FILE 指针直到找到一个空格,然后进一步增加直到我们找到下一个单词的第一个字符。这是必要的,因为我正在阅读的文件可能在单词之间有多个空格,与具有相同单词内容但单个空格的文件相比,这不会导致匹配的字符串。

然后,此方法将需要ungetc(),因为我们将从流中获取下一个单词的第一个字符。

关于不同实现的任何想法,或者我是否完全受限于这种方法?

    while ( (c = fgetc(fileToHash) != ' ' )
        ;
    while( (c = fgetc(fileToHash)) == ' ')
        ;
    ungetc(c, fileToHash); 
4

3 回答 3

1

是的,如果您坚持使用文件指针作为索引,那几乎就是您所拥有的。更好的解决方案可能是将部分或全部文件读入缓冲区并将指针操作到缓冲区中,除非您打算对文件内容进行随机访问覆盖——这对于文本文件通常是完全不切实际的。

于 2014-01-29T03:30:34.710 回答
0

您可以使用 fscanf 读取由空格分隔的单词。此示例将从标准输入中读取每个单词并将它们中的每一个打印在新行上:

char buf[128];
while (fscanf(stdin, "%s", buf) > 0)
    puts(buf);
于 2014-01-29T06:30:18.037 回答
0

这个怎么样。

void findWord(FILE *f, int n) {
    int c = 0;
    while (n-- > 0 && c != EOF) {
        do c = fgetc(f); while (c != EOF && !isalpha(c));
        while (c != EOF && isalpha(c)) c = fgetc(f);
    }
}
于 2014-01-29T03:43:56.930 回答