Вставка пробелов в начало строки файла - C (СИ)

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

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

Доброго времени суток!Помогите разобраться. В файле 123.txt подсчитывается кол-во пробелов в строке, в другой файл записывается эта же строка только в начало добавляются эти пробелы(Пример: 123.txt:Привет как дела? out.txt: Привет как дела?. В out 2 пробела сначала) Там только косяк в том, что обрабатывается только первая строка. Пишу в CodeBlocks/ Помогите решить, заранее спасибо.
#include <stdio.h>
#include <stdlib.h> 
#include <string.h>
#include <windows.h> 
#include <string.h>
#include <malloc.h>
 
main()
{FILE *in, *out;
char *str,*pr;
int i,S,j,k;
in=fopen("123.txt","r");
if(in==NULL) //Если файла 123 нет в папке с прогой, то программа завершается
{printf("Error\n");
exit(-1);} else {
out=fopen("out.txt","w"); 
str=(char*)malloc(sizeof(char)*128) ;
fgets(str,128,in);
S=strlen(str);
j=0;
for(i=0;i<S;i++)
{
if(str[i]==' ')
j++;
}
pr=(char*)calloc((S+j+1),sizeof(cha r));
 
for(i=0;i<j;i++)
pr[i]=' ';
for(i=0;i<S;i++) {pr[j+i]=str[i];}
fputs(pr,out);
free(pr);
free(str);
fclose(out);
fclose(in);
printf("Done\n");}
}

Решение задачи: «Вставка пробелов в начало строки файла»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
  FILE *in, *out;
  char *str,*pr=NULL;
  int i,S,j;
  in=fopen("f1.txt","r");
  out=fopen("f2.txt","w");
  if(in==NULL||out==NULL) 
  {
     printf("Error\n");
     exit(-1);
  }
  else 
  {
    str=(char*)malloc(sizeof(char)*128) ;
    while( fgets(str,128,in)!=NULL)
    {
      S=strlen(str);
      j=0;
      for(i=0;i<S;i++)
      {
         if(str[i]==' ')
         j++;
      }
      pr=(char*)calloc((S+j+1),sizeof(char));
      for(i=0;i<j;i++)pr[i]=' ';
      for(i=0;i<S;i++)pr[j+i]=str[i];
      fputs(pr,out);
    }
     free(pr);free(str);
     fclose(out);fclose(in);
     printf("Done\n");
  }
  return 0;
}

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

В данном коде решается задача вставки пробелов в начало строки файла. Вот список действий, которые выполняются в коде:

  1. Подключаются необходимые библиотеки (stdio.h, stdlib.h, string.h).
  2. Объявляются и инициализируются переменные:
    • in - указатель на файл для чтения;
    • out - указатель на файл для записи;
    • str - указатель на строку, в которой читается информация из файла;
    • pr - указатель на строку, в которой будет храниться результат;
    • i, S, j - целочисленные переменные для работы со строками.
  3. Открываются файлы f1.txt и f2.txt для чтения и записи соответственно.
  4. Проверяется, открылись ли файлы корректно. Если возникла ошибка, выводится сообщение об ошибке и программа завершается.
  5. Если файлы открылись корректно, выделяется память под строку str и pr.
  6. В цикле while считывается информация из файла f1.txt в строку str до тех пор, пока не будет достигнут конец строки или не будет прочитана ошибка.
  7. Внутри цикла вычисляется длина строки S.
  8. В цикле for удаляются все пробелы в начале строки.
  9. В цикле for пробелы заменяются на символы пробелов.
  10. В цикле for записывается отформатированная строка в файл f2.txt.
  11. Освобождается память, выделенная под строку pr.
  12. Освобождается память, выделенная под строку str.
  13. Закрываются файлы f1.txt и f2.txt.
  14. Выводится сообщение об успешном выполнении задачи.
  15. Возвращается 0, что означает успешное выполнение программы.

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


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

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

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