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

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

Восстановить пароль Регистрация
 
Анатолий_95
0 / 0 / 0
Регистрация: 02.11.2013
Сообщений: 10
26.11.2013, 00:46     в тексте который считан из файла выбрать предложения с заданным числом строк #1
Подскажите, как в тексте который считан из файла выбрать предложения с заданным числом строк. Прочитал Павловскую ( в т.ч. и практикум) вроде похожие примеры, но как не пробовал ничего не выходит. Буду очень признателен. Хотя бы принцип и с помощью каких функций и циклов это сделать. Заранее благодарю.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2013, 00:46     в тексте который считан из файла выбрать предложения с заданным числом строк
Посмотрите здесь:

C++ Вычислить сумму с заданным числом членов
Найти седловую точку целочисленной матрицы с числом строк не более 12, числом столбцов не более 20 (ООП) C++
Дано два предложения (Распечатать слова из первого предложения, который начинаются на первую букву последнего слова второго предложения) C++
C++ Имеются два текстовых файла с одинаковым числом строк. Выяснить совпадают ли их строки
Вывод на экран предложений с заданным числом слов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
RESTY
5 / 5 / 0
Регистрация: 30.05.2012
Сообщений: 89
26.11.2013, 01:05     в тексте который считан из файла выбрать предложения с заданным числом строк #2
Вы наверное хотели сказать предложения с заданным числом слов?)
если так то читайте ваш текст(строку) до тех пор пока не встретите символ разделить например .!? как встретили все что прочитали например кидайте в vector<string> , так вы поделите текст на предложения, пока считываете предложение можно попутно считать количество слов в нем. Вот и все потом выбираете предложения с заданным количеством слов.Как то так)
Анатолий_95
0 / 0 / 0
Регистрация: 02.11.2013
Сообщений: 10
26.11.2013, 01:12  [ТС]     в тексте который считан из файла выбрать предложения с заданным числом строк #3
А что такое вектор, про них нам еще ничего не рассказывали.
RESTY
5 / 5 / 0
Регистрация: 30.05.2012
Сообщений: 89
26.11.2013, 03:19     в тексте который считан из файла выбрать предложения с заданным числом строк #4
Вот думаю разберешься и тебе это поможет, вполне возможны косяки с подсчетом слов, если будут доп.символы разделители, по аналогии добавишь их.
тут делается все ручками, есть методы и функции которые облегчают разбиение текста на предложения и слова, тот же split.
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
#include<iostream>
#include<vector>
#include<string>
#include<stdlib.h>
#include<locale.h>
#include<fstream>
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int n;
    std::cout << "Введите количество слов n = ";
    std::cin >> n;
 
    std::ifstream in("input.txt"); // читаем из файла
    std::string text; // в строку
    std::getline(in,text,'\0');
    in.close();
 
    std::cout << text << std::endl;
    std::vector<std::string> data; // вектор если грубо сказать массив в котором могут храниться объекты любых 
    std::string temp = "";             // типов в данном случае std::string
 
    //разбиваем текст на предложения
    for(int i = 0; i < text.size(); ++i)
    {
        if (text[i] != '.' && text[i] != '!' && text[i] != '?') // пока не встретили символ завершения строки
            temp += text[i]; // считываем символы в строку (предложение)
        else
        {
            temp += text[i];
            data.push_back(temp);  // как только встретили кидаем нашу строку в вектор(массив)
            temp.clear(); // "очищаем строку"
        }
    }
 
    // считаем количество слов в каждом предложении.
    std::cout << std::endl;
    std::cout << "Предложения с заданным количеством слов(" << n << ")" << std::endl;
    for (int i = 0; i < data.size(); ++i) // идем по вектору с предложениями
    {
        int count = 0; // кол.слов в текущем предложении
        temp = data[i]; // берем i предложение
        for (int j = 0; j < temp.size(); ++j) // и идем по всем его символам
        {
                        // пока не встретили "символы разделители слов" в предложении идем дальше
            if(temp[j] != ' ' && temp[j] != ',' && temp[j] != ':' && temp[j] != ';' && temp[j] != '.')
                continue;
            else
            {
                ++count;//как только наткнулись на 1 из них - это значит что слово закончилось
                ++j;
                                // ищем начало след слова
                while(temp[j] == ' ' || temp[j] == ',' || temp[j] == ':' || temp[j] == ';')
                    ++j;
            }
                        // и так пока не найдем все слова
        }
        // если кол. слов == кол. заданному то выводим предложение
        std::cout << count << std::endl;
        if(count == n)
            std::cout << i << ")"<< data[i] << std::endl;
 
    }
 
    std::system("pause");
    return 0;
}
Анатолий_95
0 / 0 / 0
Регистрация: 02.11.2013
Сообщений: 10
26.11.2013, 20:49  [ТС]     в тексте который считан из файла выбрать предложения с заданным числом строк #5
Спасибо большое, RESTY. Однако, насколько я понял, вектор является элементом ООП. А у нас пока только структурное программирование. Если можно подскажи на что можно заменить вектор (строку что-ли) и как это описать на С++. Кусочек кода.
RESTY
5 / 5 / 0
Регистрация: 30.05.2012
Сообщений: 89
27.11.2013, 02:18     в тексте который считан из файла выбрать предложения с заданным числом строк #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
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
#include<iostream>
#include<string>
#include<locale.h>
#include<fstream>
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int n;
    std::cout << "Введите количество слов n = ";
    std::cin >> n;
 
    std::ifstream in("input.txt");
    std::string text;
    std::getline(in,text,'\0');
    in.close();
 
    std::string cur = "";
 
    int cur_count_word = 0;
    std::cout << "Предложения с заданным количеством слов(" << n << ")" << std::endl;
    for(int i = 0; i < text.size(); ++i)
    {
        if (text[i] != '.' && text[i] != '!' && text[i] != '?')
        {
            cur += text[i];
            if(text[i] != ' ' && text[i] != ',' && text[i] != ':' && text[i] != ';' && text[i] != '.')
                continue;
            else
            {
                ++cur_count_word;
                ++i;
                while(text[i] == ' ' || text[i] == ',' || text[i] == ':' || text[i] == ';')
                {
                    cur += text[i++];
                }
                cur += text[i];
            }
        }   
        else
        {
            ++cur_count_word;
            cur += text[i];
            if (cur_count_word == n)
                std::cout << cur << std::endl;
            cur = "";
            cur_count_word = 0;
        }
    }
 
    std::system("pause");
    return 0;
}
}
Yandex
Объявления
27.11.2013, 02:18     в тексте который считан из файла выбрать предложения с заданным числом строк
Ответ Создать тему
Опции темы

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