Вставка пробелов в начало строки файла - 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;
}
Объяснение кода листинга программы
В данном коде решается задача вставки пробелов в начало строки файла. Вот список действий, которые выполняются в коде:
- Подключаются необходимые библиотеки (stdio.h, stdlib.h, string.h).
- Объявляются и инициализируются переменные:
- in - указатель на файл для чтения;
- out - указатель на файл для записи;
- str - указатель на строку, в которой читается информация из файла;
- pr - указатель на строку, в которой будет храниться результат;
- i, S, j - целочисленные переменные для работы со строками.
- Открываются файлы f1.txt и f2.txt для чтения и записи соответственно.
- Проверяется, открылись ли файлы корректно. Если возникла ошибка, выводится сообщение об ошибке и программа завершается.
- Если файлы открылись корректно, выделяется память под строку str и pr.
- В цикле while считывается информация из файла f1.txt в строку str до тех пор, пока не будет достигнут конец строки или не будет прочитана ошибка.
- Внутри цикла вычисляется длина строки S.
- В цикле for удаляются все пробелы в начале строки.
- В цикле for пробелы заменяются на символы пробелов.
- В цикле for записывается отформатированная строка в файл f2.txt.
- Освобождается память, выделенная под строку pr.
- Освобождается память, выделенная под строку str.
- Закрываются файлы f1.txt и f2.txt.
- Выводится сообщение об успешном выполнении задачи.
- Возвращается 0, что означает успешное выполнение программы.