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

Предложения в строках - C++

Восстановить пароль Регистрация
 
Lotus34
5 / 6 / 1
Регистрация: 26.10.2012
Сообщений: 124
10.01.2013, 22:34     Предложения в строках #1
Просидел 2 часа и не смог догнать, как реализовать задачу.Решил обратиться к умеющим за помощью.
Задача:
Написать программу, которая считывает три предложения и выводит их в обратном порядке.

Я так понял,что бы её решать надо найти все знаки завершения, выделить предложения по отдельности в отдельные строки, а потом вывести строки в обратном порядке,но я не могу понять как это реализовать в коде.
Прошу , натолкните на истину.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2013, 22:34     Предложения в строках
Посмотрите здесь:

Даны два предложения. Найти самое короткое из слов первого предложения, которого нет во втором предложении C++
C++ Даны два предложения. Найти самое короткое из слов первого предложения,которого нет во втором предложений?
Дан целый массив максимальной размерности 20*20. Провести сортировку по возрастанию в нечетных строках массива и по убыванию в четных строках. C++
о строках C++
В текстовом файле построчно записаны предложения. Записать во второй текстовый файл первое слово последнего предложения C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Поночка
4 / 4 / 0
Регистрация: 04.10.2009
Сообщений: 22
10.01.2013, 23:18     Предложения в строках #2
Если совсем по-простому:
Заводишь массив(или лучше вектор) строк, в котором будешь хранить предложения.
Заводишь переменную, в которой хранишь номер обрабатываемого предложения
Идешь по входной строке. если текущий символ-не символ окончания предложения, то копируешь символ в текущее предложение. Если предложение кончилось, то увеличиваешь индекс. Как кончится строка, то ты получишь все свои предложения.
а для вывода- идешь по массиву(вектору) в обратном порядке. счетчик не с 0 до N-1, а с N-1 до 0
!Андрей!
6 / 6 / 0
Регистрация: 31.01.2012
Сообщений: 134
10.01.2013, 23:23     Предложения в строках #3
Lotus34, писал на скорую руку, но думаю что основы понятны, при желании можно менять как нужно.
Сделано конечно глупо, но работает.

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
# include <iostream>
using namespace std;
# include <string>
char text[] = "a. bbb. 444. 333.\0";
 
string strings[3];
void copyToString(int num, int st, int nd)
{
    for(int i = st; i < nd; i++)
        strings[num]+=text[i];
}
 
int main()
{
    struct startAndEnd{int start; int end;};
    startAndEnd lines[3];
    
    cout << text << endl;
    int i = 0;
    for(int j = 0; j < 3; j++)
    {
        while(text[i] == ' ') i++;
 
        lines[j].start = i;
        for( ;text[i] != '\0'; i++)
        {
                lines[j].end = i;
                if(text[i] == '.') break;
        }
        i++;
    }
 
    for(int i = 0; i < 3; i++)
        copyToString(i, lines[i].start, lines[i].end);
 
    for(int i = 3; i >= 0; i--)
        cout << strings[i] << endl;
 
    system("pause");
    return 0;
}
Lotus34
5 / 6 / 1
Регистрация: 26.10.2012
Сообщений: 124
11.01.2013, 11:20  [ТС]     Предложения в строках #4
Цитата Сообщение от !Андрей! Посмотреть сообщение
Lotus34, писал на скорую руку, но думаю что основы понятны, при желании можно менять как нужно.
Сделано конечно глупо, но работает.

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
# include <iostream>
using namespace std;
# include <string>
char text[] = "a. bbb. 444. 333.\0";
 
string strings[3];
void copyToString(int num, int st, int nd)
{
    for(int i = st; i < nd; i++)
        strings[num]+=text[i];
}
 
int main()
{
    struct startAndEnd{int start; int end;};
    startAndEnd lines[3];
    
    cout << text << endl;
    int i = 0;
    for(int j = 0; j < 3; j++)
    {
        while(text[i] == ' ') i++;
 
        lines[j].start = i;
        for( ;text[i] != '\0'; i++)
        {
                lines[j].end = i;
                if(text[i] == '.') break;
        }
        i++;
    }
 
    for(int i = 0; i < 3; i++)
        copyToString(i, lines[i].start, lines[i].end);
 
    for(int i = 3; i >= 0; i--)
        cout << strings[i] << endl;
 
    system("pause");
    return 0;
}
У меня что то не заработало. И ещё вопрос-можно ли это как то попроще сделать?
igorrr37
 Аватар для igorrr37
1594 / 1222 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
11.01.2013, 11:56     Предложения в строках #5
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 <stack>
#include <string>
 
int main()
{
    std::stack<std::string> stack;
    char c;
    std::string s, sDelims(".!?");
    do
    {
        do
        {
            std::cin.get(c);
            s += c;
        }
        while(sDelims.find(c) == std::string::npos);
        stack.push(s);
        s.clear();
    }
    while(stack.size() != 3);
    while(!stack.empty())
    {
        std::cout << stack.top() << "\n\n";
        stack.pop();
    }
    return 0;
}
Yandex
Объявления
11.01.2013, 11:56     Предложения в строках
Ответ Создать тему
Опции темы

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