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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
chert
0 / 0 / 0
Регистрация: 10.10.2009
Сообщений: 26
#1

Файловые операции - C++

08.11.2009, 01:53. Просмотров 1336. Ответов 11
Метки нет (Все метки)

Написать программу, которая считывает текст из файла и определяет, сколько в нем слов, состоящих не более чем из четырех букв.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.11.2009, 01:53     Файловые операции
Посмотрите здесь:

Существует ли возможность перехватить файловые операции? - C++
Профи, вопрос для вас!!!) Существует ли возможность перехватить файловые операции (копирование, создание, удаление, итд)? например:...

Файловые операции 2-ого уровня сложности. - C++
Подскажите пожалуйста найти такую штуку: список файловых ошибок(не уверен что правильно называю даже). Например,...

Файловые операции: генерировать файл, читать, редактировать, записывать - C++
Попалось задание на заочке, немного не представляю, как его сделать на плюсах (тем более чтобы работало на Borland C++ 5). Кто может...

Файловые потоки - C++
Структура enum status {Boss=1, Manager}; struct Worker { string Name; int Year; ...

файловые потоки - C++
Помогите найти ошибку! Программа из книги Дейтелов!Не понимаю что я пропустил .. ------ Построение начато: проект: potok,...

Файловые функции - C++
Ребят объясните,как это вообще сделать? Помогите пожалуйста В магазине составлен список людей, которым выдана карта постоянного...

Файловые потоки в Си и С++ - C++
Вот код. Нужно использовать чтение из файла и запись в файл, такое же как и в языке СИ (без использования библиотек которых нет в СИ). Я...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
#pragma
Временно недоступен
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
08.11.2009, 02:36     Файловые операции #2
Вот,я старался,но я сам учусь,так что возможны ошибки/грубые ошибки.Имей это в виду.
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
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
#define MAX_STRING_SIZE 255
#define PATH "Тут твой путь к файлу с двойными слешами"
int main ()
{
   FILE *file;
   char *str_in_file = (char*)malloc(MAX_STRING_SIZE);
   char *read_str   = (char*)malloc(MAX_STRING_SIZE);
   int count = 0;
 
   if (str_in_file == NULL || read_str == NULL)
   {
      printf("Cannot allocate memory.Program will exit.");
      exit(EXIT_FAILURE);
   }
   if ((file = fopen(PATH,"r")) == NULL)
   {
      printf("File couldn't be open!");
      exit(EXIT_FAILURE);
   }
 
   while (fgets(str_in_file,MAX_STRING_SIZE,file) != NULL)
   {
      read_str = strtok (str_in_file," ,.-");
      while (read_str != NULL)
      {
         if (strlen(read_str) > 4)
            ++count;
         read_str = strtok (NULL, " ,.-");
      }
   }
 
   printf("Quantity of words that their length > 4 is: %d",count);
 
   free(str_in_file);
   free(read_str);
 
   exit(EXIT_SUCCESS);
}
Только нужно указать путь в define
chert
0 / 0 / 0
Регистрация: 10.10.2009
Сообщений: 26
08.11.2009, 13:52  [ТС]     Файловые операции #3
#pragma, спасибо большое!
не не мог бы ты мне подробнее описать что делается в каждой строке,че-то я не совсем понимаю.Пожалуйста!
Андрейка
419 / 223 / 27
Регистрация: 25.03.2009
Сообщений: 744
08.11.2009, 14:00     Файловые операции #4
chert, вот на С++ если нада
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <fstream>
#include <string>
int main()
{
    size_t kol = 0 ;
    std::ifstream in("d:\\pr.txt");
    std::string s;
    while (in>>s)
        if (s.length()<=4) kol++;
    std::cout<<kol;
    return 0;
}
chert
0 / 0 / 0
Регистрация: 10.10.2009
Сообщений: 26
08.11.2009, 14:02  [ТС]     Файловые операции #5
Андрейка, я не совсем понимаю что ты тут делал!объясни плиз!
Rififi
2338 / 1053 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
08.11.2009, 14:07     Файловые операции #6
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
#include <algorithm>
#include <functional>
#include <iostream>
#include <fstream>
#include <string>
 
template <typename T>
struct less_equal_length : public std::unary_function<T, bool>
{
    typedef typename T::size_type size_type;
    less_equal_length(size_type len) : length_(len) {}
    bool operator()(const T& s) const { return s.length() <= length_; }
    const size_type length_;
};
 
int main()
{
    std::ifstream ifs("input.txt");
 
    typedef std::istream_iterator<std::string> I;
    std::cout
        << std::count_if(I(ifs), I(), less_equal_length<std::string>(4))
        << std::endl;
 
    return (0);
}
chert
0 / 0 / 0
Регистрация: 10.10.2009
Сообщений: 26
08.11.2009, 14:10  [ТС]     Файловые операции #7
Rififi, а подробней описать не можете!
а то некоторые строчки не понимаю что там делается!
Андрейка
419 / 223 / 27
Регистрация: 25.03.2009
Сообщений: 744
08.11.2009, 14:11     Файловые операции #8
chert, size_t == unsigned int , ifstream файловый поток для считывания то есть мы считываем инфу с файла ну путь к файлу в строке " " string класс для реализации строки в С++ s - его объект
while (in>>s) пока считываем строки из файла и если их длина ( метод length) меньше или равна 4 то мы увеличиваем счётчик кол ну и выводим результат
Rififi
2338 / 1053 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
08.11.2009, 14:15     Файловые операции #9
chert,
используется обобщенный алгоритм std::count_if
в нём подсчитывается, сколько элементов из входного потока данных удовлетворяют условию, заданным третьим параметром. а условие в данном случае - чтобы длина каждого слова была <= 4
#pragma
Временно недоступен
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
08.11.2009, 16:38     Файловые операции #10
То,что я писал,это на языке Си
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
#include <stdio.h>/* подключаем нужные заголовки */
#include <string.h> 
#include <stdlib.h>
 
#define MAX_STRING_SIZE 255
#define PATH "Тут твой путь к файлу с двойными слешами"
int main ()
{
   FILE *file; /* Это указатель на файл */
   char *str_in_file = (char*)malloc(MAX_STRING_SIZE);/* Тут выделяется память
                                                        под строки,
                                                        ровно 255 char-ов */
   char *read_str   = (char*)malloc(MAX_STRING_SIZE);/* в динамической памяти*/
   int count = 0;/* счётчик слов*/
 
   if (str_in_file == NULL || read_str == NULL)/* Проверка,корректно ли выделилась
                                                память(может её не хватает
                                                процессу тогда malloc возвращает
                                                NULL-указатель)*/
   {
      printf("Cannot allocate memory.Program will exit.");/* В этом случае печатаем*/
      exit(EXIT_FAILURE);            /* сообщение об ошибке и выходим их программы*/
   }
   if ((file = fopen(PATH,"r")) == NULL)
   {
      printf("File couldn't be open!");
      exit(EXIT_FAILURE);
   }
 
   while (fgets(str_in_file,MAX_STRING_SIZE,file) != NULL)/* Тут в цикле в строку
   { /*str_in_file помещается строка из файла,а заодно она проверяется на NULL,
     потому что fgets может возвратить NULL(см.документацию)
     
      Теперь с помощью strtok мы "режем" строку на слова.Каждое новое 
      использование strtok возвращает следующее слово в строке(как я сам понял)
      (там видимо есть какой-то указатель,и его используют по новой,при этом он 
      указывает на последние данные в очереди).*/
      read_str = strtok (str_in_file," ,.-"); 
      /*Затем read_str проверяется на NULL (так как strtok тоже может его
       возвратить)*/
      while (read_str != NULL)
      { /* И сравниваем длину read_str с числом 4,если больше,увеличиваем счётчик*/
         if (strlen(read_str) > 4)
            ++count;
         /* "Обнуляем" значение read_str(тут я не знаю,зачем я оставил эти строки,
         они явно лишние так как тело цикла будет выполняться только один раз,
         значит,он вообще не нужен .Но не суди строго,я просто скопипастил код
         из примера в документации и немного его поменял,а это видимо упустил.*/
         read_str = strtok (NULL, " ,.-");
      }
   }
   /*Печатаем последнее значение count*/
   printf("Quantity of words that their length > 4 is: %d",count);
   /*Освобождаем память,выделенную под строки*/
   free(str_in_file);
   free(read_str);
   /*Выходим из программы с кодом SUCCESS*/
   exit(EXIT_SUCCESS);
}
Kamikadze1024
0 / 0 / 0
Регистрация: 08.11.2009
Сообщений: 53
08.11.2009, 23:16     Файловые операции #11
Народ, помогите. Мне нужно считать из файла в 2 массива. Файл состоит из нескольких строчек(2х). первое число в строке-размерность массива. Корректно заносятся только элементы из первой строки. (только их больше чем элементов в соответствующей строке моего файла). нужно считывать посимвольно с использованием fstream, iostream, seekg. перейти на 2ю строку не получается, чтобы считать данные для 2 массива. Заранее спасибо.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.11.2009, 02:04     Файловые операции
Еще ссылки по теме:

Файловые потоки - C++
Компилятор ругается при создании экземпляра класса ofstream. Среда разработки - Visual C++ 2008. Выдает error C2079: 'fileout' uses...

Файловые потоки - C++
Для каждого автобуса автопарка укажите его номер, маршрут, фамилию и инициалы шофера, время в пути. Предусмотреть поиск по фамилии шофера.

файловые переменные - C++
Помогите решить задачу на си: Дан файл f, содержащий различные даты. Каждая дата - это число, месяц и год. Найти: а) год с...

Файловые потоки - C++
1 задача) Дан текстовый файл. Напечатать все строки, в которых имеется хотя бы один пробел. 2 задача) Дан файл f, элементами которого...

Файловые указатели. Потоки - C++
Вот какой вопрос у меня появился. Пусть есть 2 указателя, связанных с одним и тем же файлом открытым в режиме read. Если я считываю...


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

Или воспользуйтесь поиском по форуму:
#pragma
Временно недоступен
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
09.11.2009, 02:04     Файловые операции #12
Сейчас заглянул ещё раз в доку strtok,оказывается это strtok (NULL, " ,.-"); способствует тому,что функция читает с того места,где закончила в прошлый раз,так что всё ок.
C
1
2
3
         /* Посылая NULL,добиваемся того,что функция
                читает с того места,где закончила в прошлый раз*/
         read_str = strtok (NULL, " ,.-");
Yandex
Объявления
09.11.2009, 02:04     Файловые операции
Ответ Создать тему
Опции темы

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