Войти

Показать полную графическую версию : помогите с задачей по СИ!!!


feliks2009
15-11-2009, 00:42
В исходном бинарном файле (создать и ввести) удалить все пробелы.
Дополнительных массивов и файлов не использовать

даже не знаю что делать(((

Ferum01
15-11-2009, 12:18
Подробнее опишите задачу, что такой бинарный файл? что там вводится?

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) цифр.
В узком смысле слова двоичные файлы противопоставляются текстовым файлам. При этом с точки зрения технической реализации на уровне аппаратуры, текстовые файлы являются частным случаем двоичных файлов, и, таким образом, в широком значении слова под определение «двоичный файл» подходит любой файл.

Ferum01
15-11-2009, 14:03
Может просто в строковую переменную записать все символы исключая пробелы? Потом эту строку записать в файл и все...

Хатя можно еще проще, то есть при анализе каждого символа (если он не равен пробелу) тут же записывать в другой фал.

примерно так:

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