Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 160, средняя оценка - 4.97
.: TAPAKAH :.
Мега Таракан
110 / 11 / 1
Регистрация: 24.05.2010
Сообщений: 227
#1

Работа с файлами через ifstream/ofstream - C++

18.02.2012, 03:02. Просмотров 22040. Ответов 3
Метки нет (Все метки)

Доброго времени суток! Есть такая задачка
Код
Дан текстовый файл f компонентами которого являются символы.
  Переписать в файл g все знаки препинания файла f, 
  а в файл h - все остальные символы файла f.
и я ее пытаюсь так решить:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <cstring>
#include <fstream>
 
int main(int argc, char * argv[])
{
  std::ifstream f("f.txt");
  std::ofstream g("g.txt");
  std::ofstream h("h.txt");
  
  while(!f.eof())
  {
    std::string buf;
    getline(f, buf);
    for (int i =0; i < strlen(buf); i++)
      if (strchr(".,?!:;", buf[i]))
        g.write(buf[i]);
      else
        h.write(buf[i]);
  }
  f.close();
  g.close();
  h.close();
  return 0;
}
но в ответ получаю целый ворох ошибок
кто сможет, исправьте пжлст (мне хотя бы фрагмент кода, который считает строку из файла, и переберет ее элементы (через цикл for))
Миниатюры
Работа с файлами через ifstream/ofstream  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.02.2012, 03:02     Работа с файлами через ifstream/ofstream
Посмотрите здесь:

C++ ifstream/ofstream/fstream
Работа с файлами через ifstream/ofstream C++
C++ ifstream, ofstream и объекты класса
Работаем с потоками на C++ ofstream и ifstream C++
сокращенная запись ifstream и ofstream C++
C++ C++ файлы ifstream/ofstream
class/string/ifstream/ofstream C++
ifstream ofstream C++
Неправильно выполнение ifstream, ofstream C++
Перегрузка ifstream и ofstream? C++
Работа с потоками ofstream/ifstream C++
C++ Перегрузка ifstream и ofstream для работы с файлами в little-endian формате?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soon
2537 / 1302 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
18.02.2012, 06:24     Работа с файлами через ifstream/ofstream #2
for (int i =0; i < strlen(buf); i++)
C++
1
for(std::size_t i = 0; i < buf.length(); ++i)
g.write(buf[i]);
std::ostream::write
HardMorg
3 / 26 / 3
Регистрация: 29.08.2010
Сообщений: 204
18.02.2012, 09:44     Работа с файлами через ifstream/ofstream #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <fstream>
 
 
int main(int argc, char * argv[]){
 
    std::ifstream f("f.txt");
 
    if(f == NULL )
        return 1;
 
    std::ofstream g("g.txt");
    std::ofstream h("h.txt");
  
    while(!f.eof()){
        char c;
        f >> c;
        if( '.' == c || ',' == c || '?' == c || '!' == c || ':' == c || ';' == c)
            g << c;
        else 
            h << c;
    }
    
    f.close();
    g.close();
    h.close();
 
    return 0;
}
Mr.X
Эксперт С++
3040 / 1685 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
18.02.2012, 17:24     Работа с файлами через ifstream/ofstream #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/////////////////////////////////////////////////////////////////////////////////////////
//Дан текстовый файл f компонентами которого являются символы.
//  Переписать в файл g все знаки препинания файла f, 
//  а в файл h - все остальные символы файла f.
/////////////////////////////////////////////////////////////////////////////////////////
#include <cctype>
#include <cstdlib>
#include <ctime>
#include <fstream>
#include <iostream>
#include <limits>
#include <string>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string  T_str;
/////////////////////////////////////////////////////////////////////////////////////////
void  rand_fill_file
    (
        const T_str&    filename,
        int             filesize,
        int             wordsize
    )
{
    std::ofstream   ofile( filename.c_str() );
 
    const char char_min     =   std::numeric_limits<char>::min();
    const char char_max     =   std::numeric_limits<char>::max();
    
    while( ofile.tellp() < filesize )
    {
        char    rand_symb   =   rand() % ( char_max - char_min + 1 ) + char_min;        
 
        if(
                !iscntrl( rand_symb )
            &&  (                        
                        ofile.tellp() % (wordsize + 1) != 0
                    ||  isspace( rand_symb )            
                )   
          )
        {            
            ofile.put( rand_symb );            
        } 
    }
}
/////////////////////////////////////////////////////////////////////////////////////////
void  to_separate_punctuation_marks
    (
        const T_str&    text_filename,
        const T_str&    punctuation_marks_filename,
        const T_str&    pure_text_filename
    )
{
    std::ifstream   i_f( text_filename                  .c_str() );
    std::ofstream   o_g( punctuation_marks_filename     .c_str() );
    std::ofstream   o_h( pure_text_filename             .c_str() );
 
    char    c   =   0;    
 
    while( i_f.get(c) )
    {
        ( ispunct(c) ? o_g : o_h ).put(c);
    }
}
/////////////////////////////////////////////////////////////////////////////////////////
void  print_file(const T_str&  filename)
{
    std::ifstream   ifile( filename.c_str() );    
 
    std::cout   <<  filename
                <<  ":"
                <<  std::endl                
                <<  ifile.rdbuf()
                <<  std::endl
                <<  std::endl;
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    const T_str     F_FILENAME      =   "f.txt";
    const T_str     G_FILENAME      =   "g.txt";
    const T_str     H_FILENAME      =   "h.txt";
 
    const int       RAND_FILE_SIZE  =   80;        
    const int       RAND_WORD_SIZE  =   4;
 
    srand(unsigned(time(0)));
 
    rand_fill_file
        (
            F_FILENAME,
            RAND_FILE_SIZE,
            RAND_WORD_SIZE
        );
 
    to_separate_punctuation_marks
        (
            F_FILENAME,
            G_FILENAME,
            H_FILENAME
        );
 
    print_file(F_FILENAME);
    print_file(G_FILENAME);
    print_file(H_FILENAME);
}
Yandex
Объявления
18.02.2012, 17:24     Работа с файлами через ifstream/ofstream
Ответ Создать тему
Опции темы

Текущее время: 11:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru