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

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

Войти
Регистрация
Восстановить пароль
 
Lotus34
5 / 6 / 1
Регистрация: 26.10.2012
Сообщений: 124
#1

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

10.01.2013, 22:34. Просмотров 446. Ответов 4
Метки нет (Все метки)

Просидел 2 часа и не смог догнать, как реализовать задачу.Решил обратиться к умеющим за помощью.
Задача:
Написать программу, которая считывает три предложения и выводит их в обратном порядке.

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

Разбить текст на предложения, а предложения - на слова - C++
Вот само задание. С помощью текстового редактора создать файл, содержащий текст, длина которого не превышает 1000 символов (длина строки...

о строках - C++
вопрос по поводу строк. я хочу в cout выводить русские символы и какие нибудь строки на русском. например string a; ...

Работа в строках - C++
Очень нужна помощь! Ввести строку. Вывести в виде нескольких строк так, чтобы в каждой строке было по 4 слова, первое слово начиналось...

Мусор в строках - C++
Привет всем!!! Я пишу помехоустойчивый декодер Витерби. Имеется граф 4x32. struct graf { int rebro0; int rebro1; ...

Функция в строках - C++
Здравствуйте, помогите пожалуйста с функцией. Где-то что-то я не понимаю по функциям.. Есть строка которая при обработке функцией...

Вопрос о строках. - C++
Здравствуйте, все. Талдычу строки. #include <iostream> #include <stdio.h> using namespace std; int main() {

произведение элементов в строках - C++
В прямоугольном массиве N×M определите произведение элементов в тех строках, которые не содержат ни одного нулевого элемента.

Реверс масива по строках. - C++
Задание: Поменять первую строку с последней, вторую с предпоследней и так далее. Я делаю вот так: # include <iostream> #include...

Замена слов в строках - C++
Доброго времени суток! Помогите, пожалуйста, вот с таким заданием: нужно в тексте заменить все слова "and" на "и". Например, есть строка:...

Подставление данных в строках - 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
1642 / 1270 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 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     Предложения в строках
Ответ Создать тему
Опции темы

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