Programa en C para invertir el contenido del archivo e imprimirlo

Dado un archivo de texto en un directorio, la tarea es imprimir el contenido del archivo al revés, es decir, la última línea debe imprimirse primero, la segunda última línea debe imprimirse en segundo lugar, y así sucesivamente.
Ejemplos: 
 

Entrada: 
archivo1.txt tiene: 
Bienvenido 

GeeksforGeeks 
Salida: 
GeeksforGeeks 
para  dar la
bienvenida a
GeeksforGeeks 
Entrada: 
archivo1.txt tiene: 
Esta es la línea uno 
Esta es la línea dos 
Esta es la línea tres 
Esta es la línea cuatro 
Esta es la línea cinco 
Salida: 
Esta es la línea cinco 
Esto es la línea cuatro 
Esta es la línea tres 
Esta es la línea dos 
Esta es la línea uno 
 

Acercarse: 
 

  1. Inicialice la longitud anterior del texto como 0.
  2. Encuentre la longitud de la línea actual y agréguela a la longitud anterior. Esto dado el siguiente índice de inicio de la nueva línea.
  3. Repita los pasos anteriores hasta el final del archivo.
  4. Inicialice la array de longitud del mensaje dado en el archivo dado.
  5. Ahora rebobine su puntero de archivo y coloque el último puntero del texto en arr[K – 1] donde K es la longitud de la array usando fseek() .
  6. Imprima la longitud de la última línea y disminuya K en 1 para imprimir la próxima última línea del archivo.
  7. Repita los pasos anteriores hasta que K sea igual a 0.

A continuación se muestra la implementación del enfoque anterior:
 

C

// C program for the above approach
#include <stdio.h>
#include <string.h>
#define MAX 100
 
// Function to reverse the file content
void reverseContent(char* x)
{
 
    // Opening the path entered by user
    FILE* fp = fopen(x, "a+");
 
    // If file is not found then return
    if (fp == NULL) {
        printf("Unable to open file\n");
        return;
    }
 
    // To store the content
    char buf[100];
    int a[MAX], s = 0, c = 0, l;
 
    // Explicitly inserting a newline
    // at the end, so that o/p doesn't
    // get effected.
    fprintf(fp, " \n");
    rewind(fp);
 
    // Adding current length so far +
    // previous length of a line in
    // array such that we have starting
    // indices of upcoming lines
    while (!feof(fp)) {
        fgets(buf, sizeof(buf), fp);
        l = strlen(buf);
        a = s += l;
    }
 
    // Move the pointer back to 0th index
    rewind(fp);
    c -= 1;
 
    // Print the contents
    while (c >= 0) {
        fseek(fp, a, 0);
        fgets(buf, sizeof(buf), fp);
        printf("%s", buf);
        c--;
    }
 
    return ;
}
 
// Driver Code
int main()
{
    // File name in the directory
    char x[] = "file1.txt";
 
    // Function Call to reverse the
    // File Content
    reverseContent(x);
    return 0;
}

Fichero de entrada: 
 

Archivo de salida: 
 

Publicación traducida automáticamente

Artículo escrito por yashbeersingh42 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *