Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 04.06.2018
Сообщений: 7
1

Найти конец предложения и перенести следующее предложение на новую строку

02.10.2018, 09:10. Показов 3431. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста с заданием. Нужно чтобы программа анализировала текст и переносила каждое предложение на новую строку. Проблемы с многоточием, сокращениями и прямой речью. Заранее спасибо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.10.2018, 09:10
Ответы с готовыми решениями:

Найти ошибки в коде. Перенос предложения на новую строку и удаление лишних разделителей
Программа должна переносить каждое предложение на новую строку. unit Unit1; interface uses...

Перенести все цифры предложения в конец строки
Я сделал такой код, но мне сказали что не правильно, потому что я например пишу asd123asd123asd и...

Перенести часть строки в конец предложения перед точкой
Здравствуйте. Требуется в данном тексте: Если разложить поле на монохроматические...

Дано предложение. Переместить слова с 7 и более символами в конец предложения в порядке нахождения
Дано предложение. Переместить слова с 7 и более символами в конец предложения в порядке нахождения....

8
156 / 143 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
02.10.2018, 10:08 2
Я так понимаю что предложение заканчивается точкой, но ведь может быть знак вопроса, восклицания.

Добавлено через 9 минут
Пока отвечу так без кода \n
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
02.10.2018, 10:43 3
Цитата Сообщение от 1twitty Посмотреть сообщение
Проблемы
Покажите ваш код. Даже если он не совершенен.
0
0 / 0 / 0
Регистрация: 04.06.2018
Сообщений: 7
02.10.2018, 20:55  [ТС] 4
Байт, пока вот так

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
#include <iostream> 
#include <fstream> 
#include<iomanip> 
using namespace std;
float space(char *buf);
float red(char *buf);
int n = 0; 
int i = 0;   
int j = 0; 
int main()
{
    setlocale(0, "rus");
    ifstream fin("C:\\Users\\vichk\\Desktop\\textp.txt");                               
    if (!fin)
    {
        cout << "FileError" << endl;  
        return 1; 
    }
    fin.seekg(0, ios::end); //установка текущей позиции чтения на конец файла 
    int len = fin.tellg(); // метод tellg определяет длину файла 
    cout << "len = " << len << endl; // вывод значения длины файла 
    char *buf = new char[len + 1]; // создание массива символов 
    fin.seekg(0, ios::beg); //установка текущей позиции чтения на начало файла 
    fin.read(buf, len); // считывание из файла len символов в символьный массив buf 
    cout << "buf = " << endl << buf << endl << endl; // вывод строки buf для контроля 
    buf[len] = '\0'; // запись нуль-символа в конец символьного массива 
    red(buf);
    system("pause");
    return 0;
}
float space(char *buf)
{
    for (int i = 0; i <= strlen(buf); i++)
        if ((buf[i] == ' ') && (buf[i + 1] == ' ')) 
        {  
            for (int j = i; j <= strlen(buf); j++) 
                buf[j] = buf[j + 1];
            i = i - 1; 
        }
    return 0;
}
float red(char *buf)
{
    space(buf);
    while (buf[i])
    {
        if (buf[i] == '?' || buf[i] == '.' || buf[i] == '!')
        {
            for (j = n; j <= i; j++) 
                cout << buf[j]; 
            n = i + 1; 
        }
        i++; 
    }
    cout << endl; 
    return 0;
}
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
02.10.2018, 21:18 5
Цитата Сообщение от 1twitty Посмотреть сообщение
пока вот так
Есть уже о чем говорить
Строчки 25 - 26 поменяйте местами.
Почему float space... Можно int, а можно и void. Возврат значения тут никому не нужен. Это удаление повторных пробелов, да? Эффективнее идти с конца, но это не принципиально...
Что такое в функции red переменная n? она там не определена... А, понял, она глобальная. Что глупо. Опять же почему и зачем float red?
Да код тяжел и бестолков...

Добавлено через 3 минуты
1twitty, Вопрос на засыпку. Вы хотите научиться программировать, или "сдать и забыть"? Второй вариант я тоже не считаю ущербным.

Не по теме:

Тем кто в теме - вот так мы боремся за правило 4.7! До крови из носу, до полного износу!

0
0 / 0 / 0
Регистрация: 04.06.2018
Сообщений: 7
02.10.2018, 21:29  [ТС] 6
Байт, желательно конечно понять, что к чему))

Добавлено через 7 минут
Байт, Если сможете помочь попроще организовать это дело, буду безмерно благодарен)
0
474 / 426 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
02.10.2018, 21:31 7
1twitty, а почему бы при встрече символа конца строки тупо не перенести каретку на следующую позицию? (переход на новую строку вывести). И не надо никакие манипуляции проводить с бедным текстом.
Цитата Сообщение от 1twitty Посмотреть сообщение
Проблемы с многоточием, сокращениями и прямой речью.
Многоточие решается путем проверки точек далее, если они есть - значит многоточие, если нет - значит или сокращение, или конец строки. Если сокращение, проверяется следующий за ним символ, если запятая, то обращение либо сложное предложение. Если после сокращения идет обращение, но нет запятой, то простите, косяк тот, кто составлял текст)
Прямая речь в кавычках. На них и упор делать при проверке.
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
02.10.2018, 21:41 8
Цитата Сообщение от 1twitty Посмотреть сообщение
желательно конечно понять, что к чему)
Тогда так. Посмотри, как можно отреагировать на замечания в посте 5. А функцию red придется немножко переделать...
C++
1
2
3
4
5
6
7
8
9
10
11
void red(char *buf)
{
    space(buf);
    for(int i=0; i<strlen(buf); i++)
    {
        cout << buf[j]; 
        if (buf[i] == '?' || buf[i] == '.' || buf[i] == '!')
            cout  << endl; 
    }
    cout << endl; 
}
Как видишь, все намного проще.
Удачи!

Добавлено через 3 минуты
1twitty, Да простите. Вот это
Цитата Сообщение от 1twitty Посмотреть сообщение
Проблемы с многоточием, сокращениями и прямой речью.
пропустил. Но давайте сначала решим задачу без этих проблем (чтоб хоть что-то осмысленное получилось), а потом и их, с Божьей помощью, решим...
0
156 / 143 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
03.10.2018, 13:20 9
Или так
C++
1
2
3
4
5
6
7
8
9
10
void red(char *buf)
{
    char *stream;
    stream = strtok(buf, ".!?");
    while(stream != NULL)
    {
        cout << stream << "\n";
        stream = strtok(NULL, ".!?");
    }
 }
Или юзай ExtractStrings
0
03.10.2018, 13:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.10.2018, 13:20
Помогаю со студенческими работами здесь

Ввести два предложения и найти такую (максимально большую) часть первого предложения, которая входит во второе предложение.
Здравствуйте. Я только первый год учусь на программиста и не совсем ещё разбираюсь. Помогите...

Перенос предложения на новую строку
Здравствуйте, подскажите пожалуйста, вроде проблема пустяковая, но не получается её решить Вот...

Как перенести в новую строку
как перенести в новую строку

Как перенести на новую строку?
Здравствуйте! Работаю в С++ Builder XE4 Есть код:...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru