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

Разбить текст на абзацы - C++

Восстановить пароль Регистрация
 
Михаил Мамаев
1 / 1 / 0
Регистрация: 28.10.2014
Сообщений: 34
17.11.2014, 22:03     Разбить текст на абзацы #1
Всем добрый вечер. Помогите, пожалуйста, с программой на С++ в VS2013.
В общем, задан текст. Предложения текста идут подряд. Преобразовать текст так, чтобы каждое предложение составляло отдельный абзац, начинающийся с красной строки в три пробела.
В общем-то, программа почти готова, код присутствует (спасибо одному уважаемому человеку с этого форума). Но хотелось бы переделать таким образом, чтоб компилятор сам предлагал юзеру вводить свой текст, который потом в соответствиис с условием выводится в отредактированном виде. Как это возможно осуществить? Заранее спасибо за помощь.

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
#include <iostream>                 //подключение библиотеки  <iostream>
#include <stdio.h>                    //подключение библиотеки  <stdio.h>
#include <stdlib.h>                   //подключение библиотеки  <stdlib.h>
#include <string>                     //подключение библиотеки  <string>
#include <sstream>                  //подключение библиотеки  <sstream>  
#include <conio.h>                   //подключение библиотеки  <conio.h> 
#include <ctype.h>                   //подключение библиотеки  <ctype.h> 
 
using namespace std;                //обеспечим доступ к именам из std без префикса std
 
int main()                              //определение функции с именем main()
{
    setlocale(LC_CTYPE, "Russian");   //создание русскоязычного интерфейса программы
 
    string text = "Здесь напечатан произвольный текст. В соответствии с заданием его необходимо отредактировать. Каждая строчка должна начинаться как новый абзац.";  //вводимый текст
                      
    cout << text;                    //вывод на экран заданного текста
    cout << "\n\n\n\n\n";        //сделать пробел длиной в 5 строк
 
    int len = text.length();    
    string a = "   ";
    string b = a;
 
    int i = -1;                           //присваиваем переменной i значение -1
    while (++i < len)               //начало цикла
    {
        b += text[i];           //копируем символ в новую строку
        if (text[i] == '.')     //если дошли до точки
        {
            b += "\n";   //вставляем перевод строки
            b += a;     //вставляем табуляцию
 
            if (i + 1 < len && text[i + 1] == ' ')    //игнорируем пробел после точки, если он там есть
            {
                ++i;
            }
        }
    }
 
    cout << b;                   //вывод на экран отредактированного текста, в соответствии с заданием
    system("pause");         //команда о выводе командной строки
    return 0;                   //возвращающее значение
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Yan12_04
30 / 30 / 16
Регистрация: 05.11.2014
Сообщений: 117
18.11.2014, 04:40     Разбить текст на абзацы #2
cout<<"Введите текст:"<<endl;
cin>>text;
Михаил Мамаев
1 / 1 / 0
Регистрация: 28.10.2014
Сообщений: 34
18.11.2014, 09:33  [ТС]     Разбить текст на абзацы #3
Yan12_04, если б все было так просто=) Конечно, такую штуку я попробовал с самого начала. Но дело в том, что программа начинает странно реагировать на пробелы, а именно останавливаться на нем. Т.е. скажем текст "Hello.Howareyoudoing.Milkandwater." редактируется нормально. А вот после ввода такого "Hello. How are you doing. Milk and water." на экран выведется только "Hello.". Не могу разобраться с этой проблемой, поэтому и прошу помощи.
Yan12_04
30 / 30 / 16
Регистрация: 05.11.2014
Сообщений: 117
18.11.2014, 10:08     Разбить текст на абзацы #4
И при чем тогда 1 ваш вопрос? Надо выражаться яснее.

Добавлено через 15 минут
C++
1
getline (cin, text);
Михаил Мамаев
1 / 1 / 0
Регистрация: 28.10.2014
Сообщений: 34
18.11.2014, 10:26  [ТС]     Разбить текст на абзацы #5
Yan12_04, выразился настолько ясно, насколько мог. Задание ведь не поменялось.

Почему-то сейчас первое слово он просто игнорирует.

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
#include <iostream>                 //подключение библиотеки  <iostream>
#include <stdio.h>                  //подключение библиотеки  <stdio.h>
#include <stdlib.h>                 //подключение библиотеки  <stdlib.h>
#include <string>                   //подключение библиотеки  <string>
#include <sstream>                  //подключение библиотеки  <sstream>  
#include <conio.h>                  //подключение библиотеки  <conio.h> 
#include <ctype.h>                  //подключение библиотеки  <ctype.h> 
 
using namespace std;                    //обеспечим доступ к именам из std без префикса std
 
int main()                             //определение функции с именем main()
{
    string text;
    cout << "Enter random text \n\n\n\n\n\n";
    cin >> text;
    getline(cin, text);
    cout << "\n\n\n\n\n";
    setlocale(LC_CTYPE, "Russian");   //создание русскоязычного интерфейса программы
    int len = text.length();
    string a = "   ";
    string b = a;
 
    int i = -1;                     //присваиваем переменной i значение -1
 
    while (++i < len)              //начало цикла
    {
        b += text[i];            //копируем символ в новую строку
 
        if (text[i] == '.')     //если дошли до точки
 
        {
            b += "\n";        //вставляем перевод строки
            b +=a ;          //вставляем табуляцию
 
 
 
            if (i + 1 < len && text[i + 1] == ' ')    //игнорируем пробел после точки, если он там есть
            {
 
                i=i+1;
 
            }
        }
    }
 
    cout << b;                //вывод на экран отредактированного текста, в соответствии с заданием
    system("pause");         //команда о выводе командной строки
    return 0;               //возвращающее значение
}
Yan12_04
30 / 30 / 16
Регистрация: 05.11.2014
Сообщений: 117
18.11.2014, 10:38     Разбить текст на абзацы #6
Перед getline cin уберите.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2014, 10:42     Разбить текст на абзацы
Еще ссылки по теме:

Текст, состоящий не более чем из 255 символов, разбить на строки длиной не более 50 символов в строке C++
C++ Разбить текст на предложения, а предложения - на слова
Разбить файл на текст и числа C++

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

Или воспользуйтесь поиском по форуму:
Михаил Мамаев
1 / 1 / 0
Регистрация: 28.10.2014
Сообщений: 34
18.11.2014, 10:42  [ТС]     Разбить текст на абзацы #7
Yan12_04, все, разобрался. Спасибо вам большое! Очень сильно выручили.
Yandex
Объявления
18.11.2014, 10:42     Разбить текст на абзацы
Ответ Создать тему
Опции темы

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