Перенос

mail@pastecode.io avatar
unknown
c_cpp
a year ago
3.2 kB
2
Indexable
Never
#include <iostream>
#include <string>
#include <vector>
#include <cctype>
#include <algorithm>

using namespace std;

#include <iostream>
#include <string>
#include <vector>
#include <cctype>
#include <algorithm>

using namespace std;

bool isVowel(char c) {
    return (c == 'а' || c == 'е' || c == 'є' || c == 'и' || c == 'і' || c == 'ї' || c == 'о' || c == 'у' || c == 'ю' || c == 'я');
}

bool isConsonant(char c) {
    return !isVowel(c) && isalpha(c);
}

bool isTwoVowels(string s, int pos) {
    if (pos < 1 || pos >= s.length() - 1) {
        return false;
    }
    return isVowel(s[pos - 1]) && isVowel(s[pos]) && !isVowel(s[pos + 1]) && !isConsonant(s[pos + 1]);
}

bool isTwoConsonants(string s, int pos) {
    if (pos < 1 || pos >= s.length() - 1) {
        return false;
    }
    return isConsonant(s[pos - 1]) && isConsonant(s[pos]) && !isConsonant(s[pos + 1]);
}

int main() {
    string text;
    getline(cin, text);
    const int max_line_length = 80;

    vector<string> words;
    string current_word;
    for (int i = 0; i < text.length(); i++) {
        if (isspace(text[i])) {
            if (!current_word.empty()) {
                words.push_back(current_word);
                current_word.clear();
            }
        } else {
            current_word += text[i];
        }
    }
    if (!current_word.empty()) {
        words.push_back(current_word);
    }

    vector<string> lines;
    string current_line = words[0];
    for (int i = 1; i < words.size(); i++) {
        string word = words[i];
        if (current_line.length() + 1 + word.length() <= max_line_length) {
            current_line += " " + word;
        } else {
            // Начинаем новую строку, если текущее слово не помещается в строку
            if (word.length() <= max_line_length) {
                lines.push_back(current_line);
                current_line = word;
            } else {
                // Разбиваем слово на несколько частей и добавляем каждую на новую строку
                int pos = 0;
                while (pos < word.length()) {
                    string part = word.substr(pos, max_line_length - 1);
                    lines.push_back(current_line + "-" + part);
                    current_line = "";
                    pos += max_line_length - 1;
                }
            }
        }
    }
    // Добавляем последнюю строку
    lines.push_back(current_line);

    for (int i = 0; i < lines.size(); i++) {
        string line = lines[i];
        int pos = line.length() - 1;
        while (pos > 0 && pos < line.length() - 1) {
            if (isTwoVowels(line, pos)) {
                if (isConsonant(line[pos - 1])) {
                    line.insert(pos, "-\n");
                    break;
                }
            } else if (isTwoConsonants(line, pos)) {
                if (isVowel(line[pos + 1])) {
                    line.insert(pos, "-\n");
                    break;
                }
            } else {
                pos--;
            }
        }
        cout << line << endl;
    }

    return 0;
}