Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   помогите с задачей по СИ!!! (http://forum.oszone.net/showthread.php?t=157102)

feliks2009 15-11-2009 00:42 1270534

помогите с задачей по СИ!!!
 
В исходном бинарном файле (создать и ввести) удалить все пробелы.
Дополнительных массивов и файлов не использовать

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

Ferum01 15-11-2009 12:18 1270758

Подробнее опишите задачу, что такой бинарный файл? что там вводится?

Lisiy_egik 15-11-2009 13:00 1270787

на сколько я понимаю в бинарном файле нет ни пробелов, ни символа новой строки, правда если я ошибаюсь, то могу предложить сделать так:

открыть файл в режиме дозаписи, включить флаг 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); например)

Работать это не будет - нужно подумать как затереть оставшуюся часть, когда тексты будут слеплены вместе, но вроде идея должна работать))

Цитата:

Цитата Ferum01
что такой бинарный файл? »

Двоичный (бинарный) файл — в широком смысле: последовательность произвольных байтов. Название связано с тем, что байты состоят из бит, то есть двоичных (англ. binary) цифр.
В узком смысле слова двоичные файлы противопоставляются текстовым файлам. При этом с точки зрения технической реализации на уровне аппаратуры, текстовые файлы являются частным случаем двоичных файлов, и, таким образом, в широком значении слова под определение «двоичный файл» подходит любой файл.

Ferum01 15-11-2009 14:03 1270832

Может просто в строковую переменную записать все символы исключая пробелы? Потом эту строку записать в файл и все...

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

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

Код:

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 1271339

Цитата:

Цитата Ferum01
Может просто в строковую переменную записать все символы исключая пробелы? Потом эту строку записать в файл и все...
Хатя можно еще проще, то есть при анализе каждого символа (если он не равен пробелу) тут же записывать в другой фал. »

написано же в условии:
Дополнительных массивов и файлов не использовать(((

Цитата:

Цитата Lisiy_egik
#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;
} »


А ЭТО СЛУЧАЙНО НЕ С++??????????
а то нуженно чистый СИ

Цитата:

Цитата Lisiy_egik
Работать это не будет - нужно подумать как затереть оставшуюся часть, когда тексты будут слеплены вместе, но вроде идея должна работать)) »

проблема в том что надо как то этот файл считать в память
потом обработать и записать обратно в этот файл
но как это сделать?
может динамическим списком?


Время: 08:55.

Время: 08:55.
© OSzone.net 2001-