在 C 中滚动文本文件

Scrolling in text file in C

我的C语言有问题。我必须在单词 STARTSTOP 之间查找并打印从输入文本文件到输出文本文件的每隔一个单词。我创建了一个函数,它控制文本文件 STOP 中是否是下一个单词。但是如果在输入文本文件中是单词 SToP,函数 fgetc 移动到 T 并检查,下一个字母不是 O 并中断......但我需要在单词 SToP 之前得到。我怎样才能做到这一点?除了 fgetcfputcfopenfclose.

之外,我不能使用任何库函数

代码如下:

int search_STOP(int ch, FILE* in) { if(ch == 'S'){
  ch = fgetc(in);
  if(ch =='T'){
    ch = fgetc(in);
    if(ch == 'O'){       
       ch = fgetc(in);
       if(ch == 'P'){       
             return 1;
       }
    }
  }
  return 0;
}

我曾经遇到过同样的问题。大多数这些问题都可以通过谷歌搜索并将代码片段拼接在一起来解决。

为了您的目的,我稍微更改了当时编写的代码(因为我正在执行的工作比忽略搜索词中的大小写稍微复杂一些)。请注意,在这段代码中以 小写 提供搜索词 ("start") 很重要。你可以改变它,让它也接受大写的搜索词,但我会把它留给你自己解决。

#include <stdio.h>
#include <stdlib.h>

int specialFind(char *buffer, const char *s, int startIndex, int endIndex);

int specialFind(char *buffer, const char *s, int startIndex, int endIndex)
{
    int findIndex = 0;

    int s_len = 0;
    int signComp = 0;

    while(s[s_len] != '[=10=]')
    {
        s_len++;
    }

    char msg[64];

    for(int i = startIndex; i < endIndex; i++)
    {
        if(buffer[i] >= 65 && buffer[i] <= 90)
        {
            signComp = 32;
        }
        else
        {
            signComp = 0;
        }
        if(buffer[i] + signComp == s[findIndex])
        {
            findIndex++;
        }
        else
        {
            findIndex = 0;
        }
        if(findIndex == s_len)
        {
            return i - s_len + 1;
        }
    }
    return -1;
}

int main()
{
    FILE *fileptr;

    //  First opening and reading to determine file size
    fileptr = fopen("textfile.txt", "r");
    int filelen = 0;
    char c;
    while(1)
    {
        c = fgetc(fileptr);
        filelen++;
        if(feof(fileptr))
        {
            break;
        }
    }
    fclose(fileptr);

    //  Now we're actually gonna read the file to the buffer
    char buffer[filelen];
    fileptr = fopen("textfile.txt", "r");
    int index = 0;
    while(1)
    {
        buffer[index] = fgetc(fileptr);
        index++;
        if(feof(fileptr))
        {
            break;
        }
    }
    fclose(fileptr);

    return 1;
}