Просмотр полной версии : Вопрос по работе с файлами в с++
Дан файл вида:
слово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);
}
ну добавь в свой исходник цикл и всё..
nc.STRIEM
11.01.2007, 00:25
через fgets() сделай все просто...
Мой код неработает, я знаю что нужно сделать цикл чтоб было для всех строк, но код неправельный.
2 nc.STRIEM
Я не силен в си, мож ты напишешь пример или кто-нибудь хотябы))
#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;
}
2 sni4ok
1) Неработает)))
2) Мне кажется можно сделать гараздо проще. Ты там слишком все накрутил по-моему.
2 sni4ok
1) Неработает)))
2) Мне кажется можно сделать гараздо проще. Ты там слишком все накрутил по-моему.
всё работает, обьясняю по пунктам
создай файл 123.txt, напиши в него
слово1
слово2
слово3
сохрани, закрой, проверь что запускаешь из тойже дириктории(можешь кстати пути на жёсткую ссылку сделать, типа c:\123.txt, вообщем запускаешь эту бадягу, после выполнения в том же файле будет следующее:
тест:слово1
тест:слово2
тест:слово3
к вопросу насчёт того что накрутил- ты не прав, у меня вызывается 2 стандартных алгоритма.. куда может быть проще?
Компилю я в Borland C++ и он мне выдает 7 ошибок:
6 из которых ссылаются на то что не может открыть инклудовские файлы и еще ошибка в
using namespace std;
Компилю я в Borland C++ и он мне выдает 7 ошибок:
6 из которых ссылаются на то что не может открыть инклудовские файлы и еще ошибка в
using namespace std;
ну значит компилятор у тя древний, поставь последнюю версию...
кто же виноват, что у тя компилятор самые основные вещи не поддерживает?
з.ы - единственное место в приведённом коде не соотвествующие стандарту- это название функции для точки входа, если её заменить например на
int main(int, char**), то приведённый код будет 100% коретным в любом плюсовом компиляторе, поддерживающим хотябы стандарт 98 года.
ну значит компилятор у тя древний, поставь последнюю версию...
кто же виноват, что у тя компилятор самые основные вещи не поддерживает?
Нда уж....
От компилятора здесь ничего не зависит.
Вопрос остался открытым.
Нда уж....
От компилятора здесь ничего не зависит.
Вопрос остался открытым.
итак ты говорил
из которых ссылаются на то что не может открыть инклудовские файлы
считаем колличество инклудов
#include <string>
#include <vector>
#include <fstream>
#include <sstream>
#include <functional>
#include <algorithm>
и вправду их 6, заметь, что если ни один инклуд не подгрузится то и std нэймспэйсу неоткуда будет взяться,
курим стандарт, а именно главу 17.4.1.2 Headers, в ней смотрим на таблицу под названием "Table 11—C++ Library Headers"
<algorithm> <iomanip> <list> <queue> <streambuf>
<bitset> <ios> <locale> <set> <string>
<complex> <iosfwd> <map> <sstream> <typeinfo>
<deque> <iostream> <memory> <stack> <utility>
<exception> <istream> <new> <stdexcept> <valarray>
<fstream> <iterator> <numeric> <strstream> <vector>
<functional> <limits> <ostream> __________________________________________________ ______________________
видим, что все 6 вышеуказанных хедеров есть в этом списке, "-" тебе за твёрдолобость.
ну значит компилятор у тя древний, поставь последнюю версию...
кто же виноват, что у тя компилятор самые основные вещи не поддерживает?
виноват ты, потому что несешь бред полный.
using namespace std никогда не скомпилиурется без хидеров, а они у него не подключены
виноват ты, потому что несешь бред полный.
using namespace std никогда не скомпилиурется без хидеров, а они у него не подключены
в приведённом мной коде были инклуды, будь внимательнее.
Компилю я в Borland C++ и он мне выдает 7 ошибок:
6 из которых ссылаются на то что не может открыть инклудовские файлыp и еще ошибка в
using namespace s
будь внимательнее ты. они у него не инклудятся
nc.STRIEM
11.01.2007, 23:50
этот код будет работать под Mv6 но не под билдером!
nc.STRIEM
12.01.2007, 00:08
мой вариант:
#include <stdio.h>
#include <fstream>
using namespace std;
void main(void)
{
FILE *f;
f=fopen("1.txt","r");
ofstream ofs("2.txt");
char byf[128],w[]="слово:";
int i=0;
while(1)
{
byf[i]=fgetc(f);
if(byf[i]==EOF)
break;
if(byf[i]=='\n')
{
ofs<<w;
for(int j=0;j<i;j++)
ofs<<byf[j];
ofs<<endl;
i=0;
continue;
}
i++;
}
}
2 nc.STRIEM
Огромное спасибо, все работает.
Только
using namespace std;
лишнее)))
2 nc.STRIEM
using namespace std;
а по твоему ofstream где сидит?
этот код будет работать под Mv6 но не под билдером!
что такое mv6?
приведённый мой код будет как минимум работать под msvc7.0 и выше, gcc, cometau, intel ну и думаю большинство других.
Только
using namespace std;
лишнее)))
Ничуть. Это стандарт. По стандарту все, что ты подключаешь через <fstream>, <iostream> и прочие находится в пространстве имен std.
Так что либо пиши std::ofstream output_file;, либо пиши в начале using namespace std.
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot