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

Перенос слов в файле - C++

Восстановить пароль Регистрация
 
_масяня_
 Аватар для _масяня_
28 / 28 / 2
Регистрация: 18.12.2010
Сообщений: 158
18.10.2011, 12:09     Перенос слов в файле #1
Здравствуйте уважаемые программисты. Столкнулся с такой задачей: Имеется файл с текстом на русском языке. Сделать перенос всех его слов. Перенос возможен по следующим правилам:
1) переносятся либо остаются в конце строки не менее двух символов;
2) невозможен перенос перед буквами 'ь' и 'ъ';
Как такое возможно реализовать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.10.2011, 12:09     Перенос слов в файле
Посмотрите здесь:

Количество слов в файле! C++
Поиск слов в файле C++
Повтор слов в файле C++
C++ Количество слов в файле. С++
Перенос слов в консоли C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
722 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
18.10.2011, 13:24     Перенос слов в файле #2
Цитата Сообщение от _масяня_ Посмотреть сообщение
Как такое возможно реализовать?
по правилам русского языка
http://www.gramota.ru/spravka/rules/?rub=perenos

Добавлено через 1 минуту
кстати такая же задача есть у Мозгового, на самостоятельное выполнение)
_масяня_
 Аватар для _масяня_
28 / 28 / 2
Регистрация: 18.12.2010
Сообщений: 158
18.10.2011, 13:27  [ТС]     Перенос слов в файле #3
Что за Мозговой? и как это возможно реализовать програмно?
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
722 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
18.10.2011, 13:34     Перенос слов в файле #4
Цитата Сообщение от _масяня_ Посмотреть сообщение
как это возможно реализовать програмно
вечером скину полунедопиленный вариант
Цитата Сообщение от _масяня_ Посмотреть сообщение
Что за Мозговой
Автор книги 85 нетривиальных проектов, решений и задач
_масяня_
 Аватар для _масяня_
28 / 28 / 2
Регистрация: 18.12.2010
Сообщений: 158
18.10.2011, 13:47  [ТС]     Перенос слов в файле #5
Спасибо. Буду ждать

Добавлено через 1 минуту
У кого нибудь есть еще какие нибудь мысли о реализации? Задача достаточно сложная и интерестная.
Mogul-kan
23 / 23 / 2
Регистрация: 24.04.2010
Сообщений: 220
18.10.2011, 21:43     Перенос слов в файле #6
Люди есть у кого нибудь варианты как это делается. Нужен перенос по слогам.
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
722 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
23.10.2011, 13:41     Перенос слов в файле #7
Цитата Сообщение от Mogul-kan Посмотреть сообщение
есть у кого нибудь варианты как это делается
впринципе здесь просто нужно перебирать правила переноса

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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#include <iostream>
#include <vector>
#include <windows.h> //CharToOem
 
static const std::string SOUND      = "ъь";
static const std::string VOWELS     = "уеыаоэяию";
static const std::string CONSONANTS = "цкнгшщзхфвпрлджчсмтб";
 
//й
 
///////////////////////////////////////////////////////////////
 
//согласная ли буква?
bool IsConsonants(char ch)
{
    std::size_t pos = CONSONANTS.find(ch);
    return (pos == std::string::npos) ? false : true;
}
 
 
//гласная ли буква?
bool IsVowels(char ch)
{
    std::size_t pos = VOWELS.find(ch);
    return (pos == std::string::npos) ? false : true;
}
 
 
//буква - звук?
bool IsSound(char ch)
{
    std::size_t pos = SOUND.find(ch);
    return (pos == std::string::npos) ? false : true;
}
 
//////////////////////////////////////////////////
void Prepare(std::string& word)
{
    std::string res = "";
 
    for (std::size_t i = 0; i < word.size() - 1; ++i)
        res = res + word[i] + '-';
    res += word[word.size()-1];
 
    word = res;
}
//////////////////////////////////////////////////////////
 
//существует ли в оставшейся части слова хотябы 1 гласная
bool ExistsGlasInPart(const std::string& word, int pos)
{
    for (std::size_t i = pos; i < word.size(); ++i)
    if (IsVowels(word[i]))
        return true;
    return false;
}
 
 
//////////////////////////////////////////////////////////
std::string DoWordWrap(const::std::string& word)
{
    std::string res = "";
 
    for (std::size_t i = 0; i < word.size(); ++i)
    {
        //118
        if (IsConsonants(word[i-1]) && IsVowels(word[i+1]))
            continue;
 
        //119
        //нельзя отрывать ь ъ от предшеств согласной
        if (IsConsonants(word[i-1]) && IsSound(word[i+1]))
            continue;
 
        //нельзя отрывать й от предшеств гласной
        if (IsVowels(word[i-1]) && word[i+1] == 'й')
           continue;
 
        //нельзя оставлять или переносить 1 букву
        if (i == 1 || i == word.size() - 2)
            continue;
 
        //нельзя переносить часть слова если в ней нет гласных
        if (!ExistsGlasInPart(word, i) && word[i] == '-')
            continue;
            
        //правило n1
        
        //правило n2
        
        //правило n3
 
        else
            res += word[i];
    }
 
    return res;
 
}
 
 
//////////////////////////////////////////////////////////
char buf_result[255];
//разбить и распечатать все слова в словаре
void PrintWordWrap(const std::vector<std::string>& dictionary)
{
    std::size_t size = dictionary.size();
 
    for (std::size_t i = 0; i < size; ++i)
    {
        std::string s = dictionary[i];
        Prepare(s);
        std::string result = DoWordWrap(s);
        CharToOem(result.c_str(), buf_result);
        std::cout << buf_result << std::endl;
    }
}
//////////////////////////////////////////////////////////
 
 
int main()
{
    std::vector<std::string> dictionary;
 
    dictionary.push_back("акация");
    dictionary.push_back("подъезд");
    dictionary.push_back("бульон");
    dictionary.push_back("программирование");
    dictionary.push_back("полянка");
    dictionary.push_back("жесть");
    dictionary.push_back("скилл");
    dictionary.push_back("майор");
    dictionary.push_back("розыгрыш");
    dictionary.push_back("фейерверк");
    dictionary.push_back("мойка");
 
 
    PrintWordWrap(dictionary);
 
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.10.2011, 13:42     Перенос слов в файле
Еще ссылки по теме:

C++ Поиск в текстовом файле всех слов, заданных в другом текстом файле
C++ Смена слов в файле
Сравнение слов в одном файле со словами в другом файле C++

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

Или воспользуйтесь поиском по форуму:
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
722 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
23.10.2011, 13:42     Перенос слов в файле #8
рез-ат
Миниатюры
Перенос слов в файле  
Yandex
Объявления
23.10.2011, 13:42     Перенос слов в файле
Ответ Создать тему
Опции темы

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