Перенос
unknown
c_cpp
3 years ago
3.2 kB
8
Indexable
#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;
}
Editor is loading...