如何将文件指针移动到文本文件中的下一个单词?

时间:2014-01-29 03:26:46

标签: c file text-files file-pointer

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

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

这个方法需要ungetc(),因为我们可以从流中获取下一个单词的第一个字符。

关于不同实现的任何想法,还是我很好地局限于这种方法?

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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);
    }
}

答案 2 :(得分:0)

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

char buf[128];
while (fscanf(stdin, "%s", buf) > 0)
    puts(buf);