Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 13.05.2020
Сообщений: 9

Ошибка при работе с текстом

13.05.2020, 19:35. Показов 1239. Ответов 9
Метки c++ (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Столкнулся с проблемой, которую не могу решить уже не первый день. Задача такая - задан текст, из этого текста нужно взять слова и поместить их в массив, сортируя по количеству слогов в слове. Ну, вроде задача несложная. Написал код, протестировал с 2 маленькими предложениями и всё заработало, но когда я взял текст побольше, программа сломалась. Выбивает ошибку и я не знаю как мне её убрать. Помогите пожалуйста!

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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include <Windows.h>
#include <string>
#include <locale>
#include <iostream>
#include <fstream>
 
using namespace std;
 
bool IsVowel(char symbol);
int Syllable(string word);
void FileWork(char* file_place, int size, string* parr);
void FileInput(char* file_place, string* parr);
 
 
int main()
{   
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    setlocale(0, "");
    setlocale(LC_ALL, "RUS");
 
    char file_input[] = "D:\\C++\\result.txt";
 
    char text[] = "Прошло знойное лето. Наступила золотая осень."
        "Загляни в лес.По опушкам растут грибы. Среди пожухлой травы краснеют подосиновики."
        "По краю ельника можно найти скользкие грузди, душистые рыжики. Старые пни покрыты опёнками."
        "Моховые болота усыпаны румяной клюквой. На поляне горят гроздья рябины. Дни стоят погожие.";
    cout << sizeof(text) << endl;
    int size = sizeof(text);
    char* ptext = text;
 
    string arr[6];
    string* parr = arr;
 
    FileWork(ptext, size, parr);
    
    char* file_place = file_input;
    FileInput(file_place, parr);
}
const char vowels[] = { 'а', 'е', 'и', 'о', 'у', 'ы', 'э', 'ю', 'я' }; //гласные буквы рус
const char signs[] = { '.', ',', ':', '...', ';', '?', '!', ' '}; //знаки препинания
 
bool IsVowel(char symbol) //проверка символа symbol на то, что это гласная буква
{
    for (int i = 0; i < 9; i++)
        if (symbol == vowels[i]) return true;
    return false;
}
 
bool IsSign(char symbol) //проверка символа на то, что это знак препинания
{
    for (int i = 0; i < 8; i++)
        if (symbol == signs[i]) return true;
    return false;
}
 
int Syllable(string word) //подсчёт числа слогов в слове
{
    int number_of_syllables = 0;
    for (int i = 0; i < word.length(); i++)
        if (IsVowel(word[i])) number_of_syllables++;
    return number_of_syllables;
}
 
void FileWork(char* text, int size, string* parr)
{
    string temp_word;
 
    for(int i = 0; i < size; i++)
    {
        if (IsSign(text[i]))
        {
            if (temp_word != " ")
            {
                int number_of_syllables = Syllable(temp_word);
                parr[number_of_syllables - 1] += temp_word;
                parr[number_of_syllables - 1] += ", ";
            }
            temp_word = "";
        }
        else
        {
            temp_word += text[i];
        }
    }
}
 
void FileInput(char* file_place, string* parr)
{
    fstream file;
    file.open(file_place);
    for(int i = 0; i < 5; i++)
    {
        parr[i] += ";";
        file << parr[i] << endl;
    }
    file.close();
}
Миниатюры
Ошибка при работе с текстом  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.05.2020, 19:35
Ответы с готовыми решениями:

Аппаратная ошибка видео (Ошибка при работе с видеоустройствами привела к некорректной работе Windows).
Аппаратная ошибка видео. Последнее время во время игры Call of Duty: Modern Warfare 2 в мультиплеер, (между сменами карт, как только...

При работе с большим текстом программа перестаёт работать
Подскажите пожалуйста в чём ошибка? Данная программа считывает текст из документа и помещает этот текст в массив. После чего этот массив...

Проблемы с русским текстом при работе с FM20.dll.
При работе с FM20.dll возникла проблема: кирилический текст в ComboBox и TextBox вводится в виде '|||||'. Как это лечится, может, сервис...

9
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
13.05.2020, 19:42
Цитата Сообщение от AndreyVoiteshik Посмотреть сообщение
Выбивает ошибку и я не знаю как мне её убрать
На скрине тоже ваш код?
0
0 / 0 / 0
Регистрация: 13.05.2020
Сообщений: 9
13.05.2020, 19:57  [ТС]
valen10, на скрине то, что выбивает мне visual studio про запуске моего кода
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
13.05.2020, 19:57
После строки 75 пишите:
C++
1
2
3
if (temp_word.empty()) {
    cout << "Ахтунг\n";
}
Ставьте точку останова на строку внутри блока if, запускайте отладчик и ищите ошибку.
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
13.05.2020, 19:59
Цитата Сообщение от AndreyVoiteshik Посмотреть сообщение
на скрине то, что выбивает мне visual studio про запуске моего кода
Пользы от этого ноль. Нужно было открыть стек вызовов и искать там точку в своей программе, откуда сюда был вызов.
0
0 / 0 / 0
Регистрация: 13.05.2020
Сообщений: 9
13.05.2020, 20:00  [ТС]
valen10, Ахтунг написало один раз и выкинуло ошибку. Я разбирал код пошагово сразу, когда столкнулся с этим, но так и не понял в чём ошибка
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
13.05.2020, 20:03
Лучший ответ Сообщение было отмечено AndreyVoiteshik как решение

Решение

Цитата Сообщение от AndreyVoiteshik Посмотреть сообщение
но так и не понял в чём ошибка
Пустая строка там, где должно быть слово, у пустой строки слогов number_of_syllables = 0, parr[number_of_syllables - 1] - выход за границы.
1
0 / 0 / 0
Регистрация: 13.05.2020
Сообщений: 9
13.05.2020, 20:16  [ТС]
valen10, сейчас попробую как-то исправить, скорее всего дело именно в этом

Добавлено через 11 минут
valen10, исправил и всё работает!!! Я думал, что предусмотрел вариант с пустой строкой, но сделал это криво. Ещё при исправлении первой ошибки обнаружил новую - когда в тексте встречалась просто буква, допустим "в", это не было пустой строкой, но количество гласных равнялось нулю. Спасибо Вам огромное!)
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
void FileWork(char* text, int size, string* parr)
{
    string temp_word;
 
    for(int i = 0; i < size; i++)
    {
        if (IsSign(text[i]))
        {
            if (!temp_word.empty())
            {
                int number_of_syllables = Syllable(temp_word);
                if (number_of_syllables != 0)
                {
                    parr[number_of_syllables - 1] += temp_word;
                    parr[number_of_syllables - 1] += ", ";
                }
            }
            temp_word = "";
        }
        else
        {
            temp_word += text[i];
        }
    }
}
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
13.05.2020, 20:25
Цитата Сообщение от AndreyVoiteshik Посмотреть сообщение
if (!temp_word.empty())
Это не будет избыточным? Далее еще есть проверка if (number_of_syllables != 0).
И другая сторона такой модификации: слова из одной согласной никуда не относятся?
0
0 / 0 / 0
Регистрация: 13.05.2020
Сообщений: 9
13.05.2020, 20:47  [ТС]
valen10, Вы правы. Я изначально добавил две проверки Вопрос хороший, можно такие слова выводить отдельно, но думаю это не предусматривалось в задании
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.05.2020, 20:47
Помогаю со студенческими работами здесь

Ошибка при использовании ADODB.CONNECTION при работе с dbf-файлом
Добрый день! Написала макрос с использованием adodb.connection. макрос удаляет строки из файла dbf. На моем компьютере работает, поставила...

Логическая ошибка при выполнении простой модели при работе с очередями с использованием приоритетов
Здравствуйте уважаемые форумчане! работаю в Anylogic 7.0. При построении простой системы массового обслуживания, с использованием...

Не является внутренней или внешней командой - ошибка не при компиляции а при работе программы
В VS скомпилировал код #include &lt;iostream&gt; using namespace std; int main() { int a; cout&lt;&lt;&quot;Hallo&quot;; cin&gt;&gt;a; ...

Ошибка при работе с ComboBox при использовании FindComponent
Есть комбобокс, список в него загружается из стринггрида. Потом по выбранному значению в комбобоксе лабелю присваивается соответствующее...

Ошибка при построении запроса к БД при работе с dateTimePicker
Выдает ошибку при построении запроса в аксессе 2003. Раньше не работал с dateTimePicker и поэтому не понимаю где именно ошибка. Помогите...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru