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

Считать из текстового файла три предложения и вывести их в обратном порядке - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.80
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
23.06.2010, 20:47     Считать из текстового файла три предложения и вывести их в обратном порядке #1
Добрый день форумчане!

Эта тема для меня новая, поэтому не все еще получается.
Жду помощи, и еще, прошу не использовать никаких дополнительных библиотек.
И для начала только алгоритмы.
Спасибо.

1)
Написать программу, которая считывает из текстового файла три предложения и выводит их в обратном порядке.
*Немного упростим задачу, пусть все предложения заканчиваются точкой.

Как я понял, нужно открыть файл, создать три массива (для хранения предложений), и читаем файл пока не найдена точка. А как быть дальше?

2)
Написать программу, которая считывает текст из файла и выводит на экран только строки, содержащие двузначные числа.
Аналогично первой, но дальше алгоритма не знаю.

Добавлено через 2 часа 57 минут
Ну я не верю, что никто не может написать алгоритмы к данных задачам)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.06.2010, 20:47     Считать из текстового файла три предложения и вывести их в обратном порядке
Посмотрите здесь:

C++ Считать из текстового файла 3 предложения и вывести их в обратном порядке
C++ Считать три предложения и вывести их в обратном порядке
C++ Строки и структуры. Cчитать из текстового файла три предложения и вывести их в обратном порядке
C++ Считать из текстового файла три предложения и вывести их в обратном порядке
Считать в строку три предложения и вывести их в обратном порядке C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
25.06.2010, 00:00  [ТС]     Считать из текстового файла три предложения и вывести их в обратном порядке #21
Прошу прощения за глупые вопросы, но я пытаюсь понять =)

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
#include <iostream>
#include <fstream>
#define SIZE 512
 
int main ()
{
    std::ifstream FILE_in ("input.txt", std::ios::in);
    char MAS[SIZE];
    char tmp;
 
    if (!FILE_in) {
        std::cerr << "ERROR!" << std::endl;
        system ("pause");
        return 1; }
 
    while (std::ifstream::getline (MAS, SIZE, '.'))
    {
        int count=0;
        FILE_in >> tmp;
        MAS[count]=tmp;
        count++;
    }
 
    FILE_in.close();
 
    system ("pause");
    return 0;
}
error: cannot call member function `std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::getline(_CharT*, std::streamsize, _CharT) [with _CharT = char, _Traits = std::char_traits<char>]' without object
Добавлено через 2 минуты
Так, я понял.
Функция сама по себе считывает в MAS, а я пытаюсь сделать это еще раз.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
25.06.2010, 00:04     Считать из текстового файла три предложения и вывести их в обратном порядке #22
Да, самого главного я и не заметил, ifstream::getline - это функция класса, и вызывать ее надо с конкретным объектом.
C++
1
std::ifstream::getline (MAS, SIZE, '.')// считывать то считываем, только откуда?
=>
C++
1
FILE_in.getline (MAS, SIZE, '.')
Цитата Сообщение от IchMors Посмотреть сообщение
а не подскажете какой его код в ANSI?
delim сдесь обозначает не какой-то конкретный символ, а аргумент функции, который имеет тип char.
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
25.06.2010, 00:08  [ТС]     Считать из текстового файла три предложения и вывести их в обратном порядке #23
Содержимое файла input.txt:
test test test. tra-tra-tra.
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
#include <iostream>
#include <fstream>
#define SIZE 512
 
int main ()
{
    std::ifstream FILE_in ("input.txt", std::ios::in);
    char MAS[SIZE];
    char tmp;
 
    if (!FILE_in) {
        std::cerr << "ERROR!" << std::endl;
        system ("pause");
        return 1; }
 
    while (FILE_in.getline (MAS, SIZE, '.'));
 
    std::cout << MAS;
 
    FILE_in.close();
 
    system ("pause");
    return 0;
}
Консоль пустая.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
25.06.2010, 00:12     Считать из текстового файла три предложения и вывести их в обратном порядке #24
А без while?
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
25.06.2010, 00:14  [ТС]     Считать из текстового файла три предложения и вывести их в обратном порядке #25
kazak, вы правы! Спасибо

Только знаете, он счтывает до точки, и предложение не совсем полноценное получается.
Как исправить?
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
25.06.2010, 00:16     Считать из текстового файла три предложения и вывести их в обратном порядке #26
В чем неполноценность заключается?
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
25.06.2010, 00:17  [ТС]     Считать из текстового файла три предложения и вывести их в обратном порядке #27
Самого знака нет.
Будь это точка, или что-то иное.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
25.06.2010, 00:21     Считать из текстового файла три предложения и вывести их в обратном порядке #28
Тогда попробуй функцию get. Аргументы те же.
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
25.06.2010, 00:24  [ТС]     Считать из текстового файла три предложения и вывести их в обратном порядке #29
Вот, вроде бы получилось решить задачу:

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>
#define number 3
#define SIZE 512
 
int main ()
{
    std::ifstream FILE_in ("input.txt", std::ios::in);
    char MAS[number][SIZE];
 
 
    if (!FILE_in) {
        std::cerr << "ERROR!" << std::endl;
        system ("pause");
        return 1; }
 
    for (int i=number-1; i>=0; i--)
    FILE_in.getline (MAS[i], SIZE, '.');
 
    for (int i=0; i<number; i++) {
        std::cout << MAS[i];
        std::cout << std::endl;
    }
 
    FILE_in.close();
 
    system ("pause");
    return 0;
}
inputx.txt:
test test test. tra-tra-tra. am am am. pif pah.
Но как видно ниже, считываются пробелы перед предложениями, и нехватает точек.
Консоль:
Миниатюры
Считать из текстового файла три предложения и вывести их в обратном порядке  
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
25.06.2010, 00:27     Считать из текстового файла три предложения и вывести их в обратном порядке #30
Вполне логичный результат.
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
25.06.2010, 00:32  [ТС]     Считать из текстового файла три предложения и вывести их в обратном порядке #31
Да, логичный.
Но как этого избежать?

Добавлено через 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
#include <iostream>
#include <fstream>
#define number 3
#define SIZE 512
 
int main ()
{
    std::ifstream FILE_in ("input.txt", std::ios::in);
    char MAS[number][SIZE];
 
 
    if (!FILE_in) {
        std::cerr << "ERROR!" << std::endl;
        system ("pause");
        return 1; }
 
    for (int i=number-1; i>=0; i--)
    FILE_in.getline (MAS[i], SIZE, '.');
 
    for (int i=0; i<number; i++) {
        std::cout << MAS[i] << ".";
        std::cout << std::endl;
    }
 
    FILE_in.close();
 
    system ("pause");
    return 0;
}
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
25.06.2010, 00:32     Считать из текстового файла три предложения и вывести их в обратном порядке #32
В смысле пробелы в начале, ну тут ручками придется, также обстоит дело и с переводом строки.
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
25.06.2010, 00:39  [ТС]     Считать из текстового файла три предложения и вывести их в обратном порядке #33
Во какую штуку придумал)

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
#include <iostream>
#include <fstream>
#define number 3
#define SIZE 512
 
int main ()
{
    std::ifstream FILE_in ("input.txt", std::ios::in);
    char MAS[number][SIZE];
 
    if (!FILE_in) {
        std::cerr << "ERROR!" << std::endl;
        system ("pause");
        return 1; }
 
    for (int i=number-1; i>=0; i--)
        FILE_in.getline (MAS[i], SIZE, '.');
 
    for (int i=0; i<number; i++) {
        if (MAS[i][0]==' ')
            std::cout << MAS[i]+1;
            
        else std::cout << MAS[i];
 
        std::cout << "." << std::endl;
    }
 
    FILE_in.close();
    system ("pause");
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.06.2010, 00:57     Считать из текстового файла три предложения и вывести их в обратном порядке
Еще ссылки по теме:

C++ Считать в строку три предложения в вывести их в обратном порядке
Считать из текстового файла три предложения и вывести их в обратном порядке C++
Считать из текстового файла три предложения и вывести их в обратном порядке C++

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

Или воспользуйтесь поиском по форуму:
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
25.06.2010, 00:57     Считать из текстового файла три предложения и вывести их в обратном порядке #34
Можно попробовать создать класс "предложение", перегрузить операторы ввода и вывода.
Далее создать вектор предложение и три раза прочитать, потом вывести с конца ветора. Если в стиле Си то логичнее (ИМХО) опять же создать структуру "предложение", потом массив структур. В общем такая идея.

C++
1
2
3
4
5
6
7
8
class Sentence
{
public:
   friend std::ostream& operator << (std::ostream &os, const Sentence &w);
   friend std::istream& operator >> (std::istream &is, Sentence &w);
private:
   std::string str;
};
при этом реализация оператора вывода будет совсем тривиальной
C++
1
2
3
4
5
   friend std::ostream& operator << (std::ostream &os, const Sentence &w)
   {
      os << w.str;
      return os;
   }
а оператора ввода чуть посуровее... как еще точно не знаю, но если примерно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
   friend std::istream& operator >> (std::istream &is, Sentence &w)
   {
      char ch = 0;
      
      is >> ch;
      while(ch != '.') {
         w.str += ch;
         is >> ch;
      }
      w.str += '.';
 
      return is;
   }
а собственно решение совсем тривиально уже:
C++
1
2
3
4
5
6
7
8
9
   std::vector<Sentence> v(3);
   std::ifstream ifs("in.txt");
 
   for(int i = 0; i < 3; ++i)
      ifs >> v[i];
 
   for(int i = 2; i >= 0; --i)
      std::cout << v[i];
   std::cout << std::endl;
Добавлено через 2 минуты
а просто так символ "." в поток выводить не есть решение на мой взгляд. все таки надо с объектами работать, а не с выводом на экран.

Добавлено через 4 минуты
кстати о птичках, то есть о getline, вот так вот надо бы наверное
C++
1
2
3
4
5
6
   friend std::istream& operator >> (std::istream &is, Sentence &w)
   {
      std::getline(is, w.str, '.');
      w.str += '.';
      return is;
   }
Yandex
Объявления
25.06.2010, 00:57     Считать из текстового файла три предложения и вывести их в обратном порядке
Ответ Создать тему
Опции темы

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