Считать 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; }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы
- Объявляются необходимые переменные:
sp
- строка, разделяющая предложения на отдельные словаsentences
- массив указателей на строки, который будет хранить предложенияsenten
- указатель на строку, которая будет заполняться при чтении файлаt
- счётчик, который будет использоваться в циклеcount
- счётчик, который будет отслеживать количество заполненных элементов массиваsentences
fp
- указатель на файл, который будет использоваться для чтения
- Проверяется, открылся ли файл
- Если файл не открылся, выводится сообщение об ошибке и программа завершается с кодом ошибки
- Пока
count
меньше 3, выполняются следующие действия:- Выделяется память под строку
senten
- Строка
senten
инициализируется символом новой строки - Файл считывается в
senten
senten
добавляется в массивsentences
count
увеличивается на 1
- Выделяется память под строку
- Файл закрывается
- В обратном порядке (от
count-1
до 0) выполняется функцияprint_rev
для каждого элемента массиваsentences
- Каждое предложение разделяется на отдельные слова и выводится в обратном порядке
- После вывода предложения, память под него освобождается
- Программа ожидает нажатия любой клавиши, чтобы пользователь мог увидеть результат
- Программа завершается с кодом успеха
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д