Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Вопрос по работе с файлами в с++ (https://forum.antichat.xyz/showthread.php?t=30977)

freddi 10.01.2007 23:03

Вопрос по работе с файлами в с++
 
Дан файл вида:

слово1
слово2
слово3
и тд

Необходимо написать программу, которая берет каждое слово из файла и соединяет с другим словом, например «тест:», и выводит в файл результат:

тест:слово1
тест:слово2
тест:слово3

Сам мучился но ничего не вышло(((
вот мой исходник(нерабочий, создан для 2 строчек в файле) поправьте что не так, или напишите свой вариант решения данной задачи(под ДОС, не на визуале!!!).

Код:

#include <iostream.h>
#include <fstream.h>
#include <string.h>
void main()

{
  ofstream book_file("123.txt");
  ifstream input_file("123.txt");
  char one[64], two[64], stroka1 [128];
  input_file.getline(one, sizeof(one)) ;
  input_file.getline(two, sizeof(two));
  cout << one << endl;
  cout << two << endl;
  cout<<"vvedite slovo: ";
  cin.getline(stroka1,64);
  book_file<< strcat(stroka1 ,one)<<strcat(stroka1 ,two);
}


_Great_ 10.01.2007 23:32

ну добавь в свой исходник цикл и всё..

nc.STRIEM 11.01.2007 00:25

через fgets() сделай все просто...

freddi 11.01.2007 00:41

Мой код неработает, я знаю что нужно сделать цикл чтоб было для всех строк, но код неправельный.

2 nc.STRIEM
Я не силен в си, мож ты напишешь пример или кто-нибудь хотябы))

sni4ok 11.01.2007 01:42

Код:

#include <string>
#include <vector>
#include <fstream>
#include <sstream>
#include <functional>
#include <algorithm>

using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{

        std::vector<std::string> buf;
        {
                std::ifstream f("123.txt");
                std::copy(std::istream_iterator<std::string>(f),std::istream_iterator<std::string>(),std::back_inserter(buf));
        }

        std::ofstream f("123.txt");
        std::transform(buf.begin(),buf.end(),
                std::ostream_iterator<std::string>(f, "\n"),
                std::bind1st(std::plus<std::string>(), "тест:")
                );

        return 0;
}


freddi 11.01.2007 21:47

2 sni4ok

1) Неработает)))
2) Мне кажется можно сделать гараздо проще. Ты там слишком все накрутил по-моему.

sni4ok 11.01.2007 21:52

Цитата:

Сообщение от freddi
2 sni4ok

1) Неработает)))
2) Мне кажется можно сделать гараздо проще. Ты там слишком все накрутил по-моему.

всё работает, обьясняю по пунктам
создай файл 123.txt, напиши в него
слово1
слово2
слово3
сохрани, закрой, проверь что запускаешь из тойже дириктории(можешь кстати пути на жёсткую ссылку сделать, типа c:\123.txt, вообщем запускаешь эту бадягу, после выполнения в том же файле будет следующее:
тест:слово1
тест:слово2
тест:слово3

к вопросу насчёт того что накрутил- ты не прав, у меня вызывается 2 стандартных алгоритма.. куда может быть проще?

freddi 11.01.2007 22:18

Компилю я в Borland C++ и он мне выдает 7 ошибок:
6 из которых ссылаются на то что не может открыть инклудовские файлы и еще ошибка в
using namespace std;

sni4ok 11.01.2007 22:34

Цитата:

Сообщение от freddi
Компилю я в Borland C++ и он мне выдает 7 ошибок:
6 из которых ссылаются на то что не может открыть инклудовские файлы и еще ошибка в
using namespace std;

ну значит компилятор у тя древний, поставь последнюю версию...
кто же виноват, что у тя компилятор самые основные вещи не поддерживает?
з.ы - единственное место в приведённом коде не соотвествующие стандарту- это название функции для точки входа, если её заменить например на
int main(int, char**), то приведённый код будет 100% коретным в любом плюсовом компиляторе, поддерживающим хотябы стандарт 98 года.

freddi 11.01.2007 23:00

Цитата:

Сообщение от sni4ok
ну значит компилятор у тя древний, поставь последнюю версию...
кто же виноват, что у тя компилятор самые основные вещи не поддерживает?

Нда уж....
От компилятора здесь ничего не зависит.

Вопрос остался открытым.


Время: 07:00