В текстовом документе найти самое длинное слово и удалить его из этого документа - 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;
}

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

Код находит самое длинное слово в текстовом документе и удаляет его. Вот список действий:

  1. Включаем необходимые заголовочные файлы.
  2. Объявляем функцию main, которая принимает аргументы командной строки.
  3. Открываем файл для чтения с помощью функции fopen или выводим сообщение об ошибке и завершаем работу программы, если файл не может быть открыт.
  4. Создаем массив символов подстрок, которые будут использоваться в качестве слов.
  5. Инициализируем переменные для хранения максимальной длины слова и индекса этого слова.
  6. Считываем файл построчно, добавляя каждую строку в буфер.
  7. Как только встречается пробел или конец строки, сохраняем текущую подстроку в массиве слов и обновляем максимальную длину, если это необходимо.
  8. После прочтения всего файла, закрываем его.
  9. Находим максимальную длину слова, перебирая все слова в массиве.
  10. Создаем новый буфер для хранения результата.
  11. Перебираем все слова в массиве, добавляя их в буфер, если это не самое длинное слово.
  12. Открываем файл для записи с помощью функции fopen или выводим сообщение об ошибке и завершаем работу программы, если файл не может быть открыт.
  13. Записываем результат в файл с помощью функции fprintf.
  14. Закрываем файл.
  15. Возвращаем 0, чтобы указать, что программа успешно завершилась.

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


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

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

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