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

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

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

Доброго времени суток!Помогите разобраться. В файле 123.txt подсчитывается кол-во пробелов в строке, в другой файл записывается эта же строка только в начало добавляются эти пробелы(Пример: 123.txt:Привет как дела? out.txt: Привет как дела?. В out 2 пробела сначала) Там только косяк в том, что обрабатывается только первая строка. Пишу в CodeBlocks/ Помогите решить, заранее спасибо.
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <windows.h>
  5. #include <string.h>
  6. #include <malloc.h>
  7. main()
  8. {FILE *in, *out;
  9. char *str,*pr;
  10. int i,S,j,k;
  11. in=fopen("123.txt","r");
  12. if(in==NULL) //Если файла 123 нет в папке с прогой, то программа завершается
  13. {printf("Error\n");
  14. exit(-1);} else {
  15. out=fopen("out.txt","w");
  16. str=(char*)malloc(sizeof(char)*128) ;
  17. fgets(str,128,in);
  18. S=strlen(str);
  19. j=0;
  20. for(i=0;i<S;i++)
  21. {
  22. if(str[i]==' ')
  23. j++;
  24. }
  25. pr=(char*)calloc((S+j+1),sizeof(cha r));
  26. for(i=0;i<j;i++)
  27. pr[i]=' ';
  28. for(i=0;i<S;i++) {pr[j+i]=str[i];}
  29. fputs(pr,out);
  30. free(pr);
  31. free(str);
  32. fclose(out);
  33. fclose(in);
  34. printf("Done\n");}
  35. }

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

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. int main(void)
  5. {
  6.   FILE *in, *out;
  7.   char *str,*pr=NULL;
  8.   int i,S,j;
  9.   in=fopen("f1.txt","r");
  10.   out=fopen("f2.txt","w");
  11.   if(in==NULL||out==NULL)
  12.   {
  13.      printf("Error\n");
  14.      exit(-1);
  15.   }
  16.   else
  17.   {
  18.     str=(char*)malloc(sizeof(char)*128) ;
  19.     while( fgets(str,128,in)!=NULL)
  20.     {
  21.       S=strlen(str);
  22.       j=0;
  23.       for(i=0;i<S;i++)
  24.       {
  25.          if(str[i]==' ')
  26.          j++;
  27.       }
  28.       pr=(char*)calloc((S+j+1),sizeof(char));
  29.       for(i=0;i<j;i++)pr[i]=' ';
  30.       for(i=0;i<S;i++)pr[j+i]=str[i];
  31.       fputs(pr,out);
  32.     }
  33.      free(pr);free(str);
  34.      fclose(out);fclose(in);
  35.      printf("Done\n");
  36.   }
  37.   return 0;
  38. }

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

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы