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
a
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:
- Inicialice la longitud anterior del texto como 0.
- 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.
- Repita los pasos anteriores hasta el final del archivo.
- Inicialice la array de longitud del mensaje dado en el archivo dado.
- 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() .
- Imprima la longitud de la última línea y disminuya K en 1 para imprimir la próxima última línea del archivo.
- 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