Показать полную графическую версию : помогите с задачей по СИ!!!
feliks2009
15-11-2009, 00:42
В исходном бинарном файле (создать и ввести) удалить все пробелы.
Дополнительных массивов и файлов не использовать
даже не знаю что делать(((
Подробнее опишите задачу, что такой бинарный файл? что там вводится?
Lisiy_egik
15-11-2009, 13:00
на сколько я понимаю в бинарном файле нет ни пробелов, ни символа новой строки, правда если я ошибаюсь, то могу предложить сделать так:
открыть файл в режиме дозаписи, включить флаг ws (исключение пробельных символов) на поток выхода, читать первый символ и перезаписывать его с исключенными пробелами, потом затереть часть текста, который остался "лишним, из-за удаления пробельных символов).
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
char ch;
int i;
fstream both("Имя или путь к файлу", ios::ate | ios::binary);
if(!both)
{
cout << "Не удалось открыть файл \n";
return 1;
}
while(both.get(ch)) // считывает символы до достижения eof
{
both >> ws >> ch; // в данном случае ws должно выполнять функцию фильтра от пробельных символов
}
both.close();
return 0;
}
Можно включить флаг заранее, а не прямо во время вывода (cout.setf(ios::skipws); например)
Работать это не будет - нужно подумать как затереть оставшуюся часть, когда тексты будут слеплены вместе, но вроде идея должна работать))
что такой бинарный файл? »
Двоичный (бинарный) файл — в широком смысле: последовательность произвольных байтов. Название связано с тем, что байты состоят из бит, то есть двоичных (англ. binary) цифр.
В узком смысле слова двоичные файлы противопоставляются текстовым файлам. При этом с точки зрения технической реализации на уровне аппаратуры, текстовые файлы являются частным случаем двоичных файлов, и, таким образом, в широком значении слова под определение «двоичный файл» подходит любой файл.
Может просто в строковую переменную записать все символы исключая пробелы? Потом эту строку записать в файл и все...
Хатя можно еще проще, то есть при анализе каждого символа (если он не равен пробелу) тут же записывать в другой фал.
примерно так:
while(!feof(fp1))
{
do
{
fscanf(fp1, "%c", &sim[eatt]);
if (sim=='\n') break;
do
{
if ( sim!=' ' )
{ fprintf (fp,"%c", &sim); fscanf(fp1, "%c", &sim); } else break;
} while (true);
} while (!feof(fp1));
fscanf(fp1, "\n");
}
fclose(fp1);
feliks2009
16-11-2009, 00:18
Может просто в строковую переменную записать все символы исключая пробелы? Потом эту строку записать в файл и все...
Хатя можно еще проще, то есть при анализе каждого символа (если он не равен пробелу) тут же записывать в другой фал. »
написано же в условии:
Дополнительных массивов и файлов не использовать(((
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
char ch;
int i;
fstream both("Имя или путь к файлу", ios::ate | ios::binary);
if(!both)
{
cout << "Не удалось открыть файл \n";
return 1;
}
while(both.get(ch)) // считывает символы до достижения eof
{
both >> ws >> ch; // в данном случае ws должно выполнять функцию фильтра от пробельных символов
}
both.close();
return 0;
} »
А ЭТО СЛУЧАЙНО НЕ С++??????????
а то нуженно чистый СИ
Работать это не будет - нужно подумать как затереть оставшуюся часть, когда тексты будут слеплены вместе, но вроде идея должна работать)) »
проблема в том что надо как то этот файл считать в память
потом обработать и записать обратно в этот файл
но как это сделать?
может динамическим списком?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.