Отредактировать текст так, чтобы все строки, кроме последней, имели фиксированную длину - C (СИ)

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

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

Задание: Дан файл *.txt с произвольным текстом объемом не менее 1000 символов. Отредактировать текст так, чтобы все строки, кроме последней, имели фиксированную длину. Результаты редактирования сохранить в файле *.txt, исходный файл сохранить как *.bak. Правила редактирования: - слова не переносятся, - знак препинания не отделяется от слова, за которым он стоит, - строки выравниваются за счет равномерно вставляемых пробелов. То, что есть на данный момент:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#pragma warning(disable : 4996)

int main(int argc, char *argv[])
{
    
    FILE * fp= fopen("F:\\laba.txt","r");
    FILE * fp2= fopen("F:\\labaa.bak","w+");
    int n,k=0;
 
    if (fp==NULL)
    {
        printf("File wasn't open!\n");
        return 0;
    }
    else
    {
    char str[1024] = "";
    char str2[1024] = "";
 
    while(!feof(fp))
    {
        fgets(str, 1024, fp);
        printf("waite...");
 
        for(int i=0; i<sizeof(str); i++)
        {
            str2[i]=str[i];
            char * a = &str2[i];
            fputs(a,fp2);
            
            k++;
        }
 
        break;
    }
    printf("\n%d\n",k);
    fclose(fp2);
    fclose(fp);
    return 0;
    }
}
Текст из файла я занес массив, но никак не могу придумать, что с ним делать дальше. Помогите советом. )
Извиняюсь за тему, случайно вышло.

Решение задачи: «Отредактировать текст так, чтобы все строки, кроме последней, имели фиксированную длину»

textual
Листинг программы
#include <stdio.h>
 
int main ()
{
    FILE *fp;
    fp=fopen ("input.txt", "r");
    int m=0, k=0, i;
    //ищем m-длину максимальной строки
    do
    {
        while ((getc(fp)!='\n') && (!feof(fp)))
            k++;
        if (k>m) m=k;
        k=0;
    } while (!feof(fp));
    rewind (fp);
    FILE *fp_out;
    fp_out=fopen ("output.txt", "w");
    int space, len, beginning_line; //кол-во пробелов, длина и указатель на начало текущей строки
    char c;
    do
    {
        space=len=0;
        beginning_line=ftell (fp);
        //считаем количество пробелов
        while (((c=getc(fp))!='\n') && (!feof(fp)))
        {
            if (c==' ') space++;
            len++;
        }
        fseek (fp, beginning_line, SEEK_SET);
        while (((c=getc(fp))!='\n') && (!feof(fp)))
        {
            if (c!=' ') fprintf (fp_out, "%c", c);
            else
            {
                if ((m-len)%space) {k=(m-len)/space+2; len++;} //+1 исходный пробел, +1 пробел от остатка деления
                else k=(m-len)/space+1; //+1 что бы сохранить исходный пробел, на который выводим
                for (i=0; i<k; i++)
                    fprintf (fp_out, " ");
            }
        }
        fprintf (fp_out, "\n");
    } while (!feof(fp));
    fclose (fp);
    fclose (fp_out);
    return 0;
}

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

  1. Включаем файл с объявлениями стандартных функций
  2. Объявляем функцию main() как точку входа в программу
  3. Открываем файл input.txt для чтения
  4. Инициализируем переменные m=0, k=0, i=0
  5. Находим длину максимальной строки путем чтения файла до конца и сохранения количества символов в переменной k
  6. Сбрасываем указатель обратно на начало файла
  7. Открываем файл output.txt для записи
  8. Инициализируем переменные space=0, len=0, beginning_line=0
  9. Читаем каждый символ из файла до конца строки, считая количество пробелов
  10. Если длина строки меньше максимальной, выводим каждый символ, кроме пробелов, в файл output.txt
  11. Если длина строки равна максимальной, вычисляем количество пробелов, которые нужно добавить, чтобы заполнить строку до максимальной длины
  12. Добавляем необходимое количество пробелов в файл output.txt
  13. Выводим символ новой строки в файл output.txt
  14. Повторяем шаги 9-13 для каждой строки в файле
  15. Закрываем файлы input.txt и output.txt
  16. Возвращаем 0, чтобы указать, что программа успешно завершилась

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


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

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

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