使用 fgets 读取从 START 到 STOP 字符串的所有文件字符

问题描述 投票:0回答:1

我需要读取 START 和 STOP 字符串之间的整个文件并将该字符串写入新文件。

例如 file1.txt = "Hello START world! STOP" 并写入 new file2.txt = "world!" (START之后和STOP之前没有空格)

我已经有了该代码 我只能使用4个功能:

fopen()
fclose()
fgetc()
fputc()

我的代码无法正常工作。它从 START 开始,但最后写入空格 STO 字符。

你能帮我解决这个算法吗?谢谢你

#include <stdio.h>

int main( int argc, char *argv[] )  {
    FILE *input;
    FILE *output;
    char c;
    
    char start[] = "START";
    char stop[] = "STOP";
    
    int started = 0;
    int stopped = 0;
    
    input = fopen(argv[1], "r");
    output = fopen(argv[2], "w");
    
    c = fgetc(input);
    int i = 0;
    while(c != EOF) {
        if(started == 0) {
            //find start
            if(c == ' ' || c == '\n' || c == ',' || c == '.')
                i = 0;
            else 
            {
                if(c == start[i])
                    i++;
                else
                    i = 0;
            }       
            if(i == 5) {
                started = 1;
                i = 0;
                c = fgetc(input); //move space
            }
        } else {
            //write letters until stop
            if(stopped == 0) {          
                //find stop
                if(c == ' ' || c == '\n' || c == ',' || c == '.')
                    i = 0;
                else 
                {
                    if(c == stop[i])
                        i++;
                    else
                        i = 0;
                }       
                if(i == 4) {
                    stopped = 1;
                    i = 0;
                    break;
                }               
            }
            if(c != 'S' && c != 'T' && c != 'O' && c != 'P')
                fputc(c, output);
        }
        c = fgetc(input);
    }
    fclose(input);
    fclose(output);
    
    return 0;
}
c string file fgets stdio
1个回答
-1
投票

为了实现你想要的,你可以读取整个文件,然后使用 srtok 函数将文本分隔成标记(使用空格字符作为分隔符)。

然后您可以比较每个令牌并查找开始和停止条件。

根据你的例子,这应该有帮助。

参考:https://www.tutorialspoint.com/c_standard_library/c_function_strtok.htm

© www.soinside.com 2019 - 2024. All rights reserved.