Считать 3 предложения из файла и вывести их в обратном порядке - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Если я правильно поняла, не только предложения должны быть в обратном порядке, но и слова в этих предложениях. То есть все слова в тексте нужно вывести в обратном порядке в виде предложений, а не в виде массива строк. Заранее благодарю за любую помощь. Только прошу, пишите попроще, мне пока неведомы такие понятия как vector, stream и иже с ними :-)
#include <stdio.h>
#include <stdlib.h> 
 
int main(){
    FILE *f1;
    int i,j,k;
    char c;
    char str[3][4][5];    
    if ( (f1 = fopen("d:\\1.txt", "r")) == NULL ){
        printf("Can't open file\n");
        exit(1);  }    
    i=0;
    j=0;
    k=0;    
    while ( (c = fgetc(f1)) != EOF )
        {if ( c == '\0' ) {i++;}
        else if ( c == ' ' ) {j++;}
        str[i][j][k]=c;
        k++;}    
    for(i=2; i>=0; i--)
    {
        for(j=9; j>=0; j--)
        {        
            for(k=0; k<10; k++)
            { if (str[i][j][k]!=NULL) {printf ("%c", str[i][j][k]);}  } 
            printf ("%c", ' ');           
        } 
        printf("\n"); 
    }    
    fclose(f1); 
    system("pause");
    }
Ребят, помогите поправить код. Помимо нужных символов выводит какие-то кракозябры. Заранее благодарю
#include <stdio.h>
#include <stdlib.h> 
 
int main(){
    FILE *f1;
    int i,j,k;
    char c;
    char str[3][4][5];        
    if ( (f1 = fopen("d:\\1.txt", "r")) == NULL ){
        printf("Can't open file\n");
        exit(1);  }    
    i=0;
    j=0;
    k=0;    
    while ( (c = fgetc(f1)) != EOF )
        {if ( c == '\0' ) 
        {i++;
        j=0;
        k=0;
        continue;}
        else if ( c == ' ' ) 
        {j++;
        k=0;
        continue;}
        str[i][j][k]=c;
        k++;}    
    for(i=2; i>=0; i--)
    {
        for(j=3; j>=0; j--)
        {        
            for(k=0; k<4; k++)
            { if (str[i][j][k]!=NULL) {printf ("%c", str[i][j][k]);}  } 
            printf ("%c", ' ');           
        } 
        printf("\n"); 
    }    
    fclose(f1); 
    system("pause");
    }
Так лучше, но все равно какая-то лажа

Решение задачи: «Считать 3 предложения из файла и вывести их в обратном порядке»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h> 
#include <string.h>
 
#define MAX_BUFF 256
 
static char sp[] = " ,.\r\n"; 
 
void print_rev(const char * s) {
    char * t = NULL;
    if (s) {
        t = strtok(NULL, sp);
        print_rev(t);
        printf("%s ", s);
    }
}
 
int main() {
    char *sentences[3] = { 0 }, *senten = NULL;
    int t, count = 0;
    FILE * fp = fopen("d:\\1.txt", "r");
 
    if (fp == NULL) {
        puts("ERR: file not found");
        return EXIT_FAILURE;
    }
 
    while (count < 3) {
        senten = (char*) malloc(MAX_BUFF);
        *senten = '\0';
        fgets(senten, MAX_BUFF, fp);
        sentences[count++] = senten;
    }
    fclose(fp);
 
    for (t = count-1; t >= 0; --t) {
        print_rev(strtok(sentences[t], sp));
        free(sentences[t]);
        printf("\n");
    }
    system("pause");
    return EXIT_SUCCESS;
}

Объяснение кода листинга программы

  1. Включаются необходимые заголовочные файлы
  2. Объявляются необходимые переменные:
    • sp - строка, разделяющая предложения на отдельные слова
    • sentences - массив указателей на строки, который будет хранить предложения
    • senten - указатель на строку, которая будет заполняться при чтении файла
    • t - счётчик, который будет использоваться в цикле
    • count - счётчик, который будет отслеживать количество заполненных элементов массива sentences
    • fp - указатель на файл, который будет использоваться для чтения
  3. Проверяется, открылся ли файл
    • Если файл не открылся, выводится сообщение об ошибке и программа завершается с кодом ошибки
  4. Пока count меньше 3, выполняются следующие действия:
    • Выделяется память под строку senten
    • Строка senten инициализируется символом новой строки
    • Файл считывается в senten
    • senten добавляется в массив sentences
    • count увеличивается на 1
  5. Файл закрывается
  6. В обратном порядке (от count-1 до 0) выполняется функция print_rev для каждого элемента массива sentences
    • Каждое предложение разделяется на отдельные слова и выводится в обратном порядке
    • После вывода предложения, память под него освобождается
  7. Программа ожидает нажатия любой клавиши, чтобы пользователь мог увидеть результат
  8. Программа завершается с кодом успеха

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4 из 5
Похожие ответы