В текстовом документе найти самое длинное слово и удалить его из этого документа - C (СИ)
Формулировка задачи:
Не используя другие файлы и массивы.
Поправка в текстовом файле.
Решение задачи: «В текстовом документе найти самое длинное слово и удалить его из этого документа»
textual
Листинг программы
#include <stdio.h> #include <conio.h> #include <string.h> #include <ctype.h> #include <memory.h> int main(int argc, char* argv[]) { FILE *fp_in = NULL, *fp_out = NULL; const char* filename = "in.txt"; if ((fp_in = fopen(filename, "r")) == NULL) { printf("Unable to open file %s for reading\n", filename); return 1; } char** words = new char*[256]; memset((void*)words, 0x00, 256); int max_len = 0; int i = 0; char ch = '\0'; int n = 0; char* buf = new char[256]; while (((ch = fgetc(fp_in)) != EOF) || n > 0) { if (!isspace(ch) && ch != EOF) buf[n++] = ch; else if (isspace(ch) || ch == EOF) { buf[n] = '\0'; n = 0; words[i] = new char[256]; strcpy(words[i++], buf); } } fclose(fp_in); int max_i = 0; for (int i = 0; words[i] != NULL; i++) max_i = (strlen(words[i]) > strlen(words[max_i])) ? i : max_i; char* output = new char[256]; memset((void*)output, 0x00, 256); for (int i = 0; words[i] != NULL; i++) if (i != max_i) { strcat(output, words[i]); strcat(output, " "); } if ((fp_out = fopen(filename, "w")) == NULL) { printf("Unable to open file %s for writing\n", filename); return 1; } fprintf(fp_out,"%s", output); fclose(fp_out); return 0; }
Объяснение кода листинга программы
Код находит самое длинное слово в текстовом документе и удаляет его. Вот список действий:
- Включаем необходимые заголовочные файлы.
- Объявляем функцию main, которая принимает аргументы командной строки.
- Открываем файл для чтения с помощью функции fopen или выводим сообщение об ошибке и завершаем работу программы, если файл не может быть открыт.
- Создаем массив символов подстрок, которые будут использоваться в качестве слов.
- Инициализируем переменные для хранения максимальной длины слова и индекса этого слова.
- Считываем файл построчно, добавляя каждую строку в буфер.
- Как только встречается пробел или конец строки, сохраняем текущую подстроку в массиве слов и обновляем максимальную длину, если это необходимо.
- После прочтения всего файла, закрываем его.
- Находим максимальную длину слова, перебирая все слова в массиве.
- Создаем новый буфер для хранения результата.
- Перебираем все слова в массиве, добавляя их в буфер, если это не самое длинное слово.
- Открываем файл для записи с помощью функции fopen или выводим сообщение об ошибке и завершаем работу программы, если файл не может быть открыт.
- Записываем результат в файл с помощью функции fprintf.
- Закрываем файл.
- Возвращаем 0, чтобы указать, что программа успешно завершилась.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д