
3,12,21,30 |
Ввести с клавиатуры несколько строк, признаком конца ввода считать строку, состоящую из одного знака «#». Во введенном тексте подсчитать количество строчных символов. Найти все слова длиной больше заданного с клавиатуры значения. Разбить текст на страницы, параметры – длина страницы (число строк) и длина строки – вводятся с клавиатуры, слова - без переносов. |
#include <iostream>
#include <clocale>
#include <time.h>
#include <string>
#include <vector>
#pragma warning(disable : 4996)
using namespace std;
bool is_letter(char checking_char)
{
if ((checking_char >= 'A' && checking_char <= 'Z') || (checking_char >= 'a' && checking_char <= 'z'))
{
return true;
}
else
{
return false;
}
}
bool is_small_letter(char checking_char)
{
if (checking_char >= 'a' && checking_char <= 'z')
{
return true;
}
else
{
return false;
}
}
int main()
{
setlocale(LC_ALL, "RUS");
printf("Подсчет количества слов, букв в введённом тексте, разбивка текста на страницы с определенными параметрами.%c", '\n');
string input_string;
printf("Введите текст (одна или несколько строк только на английской раскладке!), в конце ввода поставьте знак #:\n");
do
{
char inp_char;
if (scanf("%c", &inp_char) != 1)
{
while (getchar() != '\n');
printf("Ошибка при вводе текста.%cВведите текст снова:\n", '\n');
continue;
}
input_string += inp_char;
} while (input_string[input_string.length() - 1] != '#');
int small_letters = 0;
for (int i = 0; i < input_string.length(); i++)
{
if (is_small_letter(input_string[i])) small_letters++;
}
printf("\nБукв нижнего регистра в тексте: %d.\n", small_letters);
int word_len_limit;
printf("\nВведите максимальную длину слова для подсчёта:");
do
{
word_len_limit = -1;
if (scanf("%i", &word_len_limit) != 1)
{
printf("Ошибка при вводе длины слова.%cВведите длину снова:", '\n');
while (getchar() != '\n');
continue;
}
if (word_len_limit < 1)
{
printf("Ошибка при вводе длины слова.%cВведите длину снова:", '\n');
while (getchar() != '\n');
continue;
}
} while (word_len_limit < 1);
int len_filtered_words = 0;
vector<int> filtered_words_offset;
for (int i = 0; i < input_string.length(); i++)
{
int j = 1;
if(is_letter(input_string[i]))
while(is_letter(input_string[i+j]))
{
if(j > word_len_limit-1)
{
len_filtered_words++;
filtered_words_offset.push_back(i);
i += j;
break;
}
j++;
}
}
printf("В тексте найдено %d слов длиной более %d букв.\nВот они:", len_filtered_words, word_len_limit);
for(int i = 0; i < len_filtered_words; i++)
{
for (int j = filtered_words_offset[i]; is_letter(input_string[j]); j++)
{
printf("%c", input_string[j]);
}
printf(" ");
}
int line_len_limit;
printf("\n\nВведите максимальную длину строки (в словах) для разбивки текста на страницы:");
do
{
line_len_limit = -1;
if (scanf("%i", &line_len_limit) != 1)
{
printf("Ошибка при вводе длины строки.%cВведите длину снова:", '\n');
while (getchar() != '\n');
continue;
}
if (line_len_limit < 1)
{
printf("Ошибка при вводе длины строки.%cВведите длину снова:", '\n');
while (getchar() != '\n');
continue;
}
} while (line_len_limit < 1);
int page_len_limit;
printf("\nВведите максимальную длину страницы (в строках) для разбивки текста на страницы:");
do
{
page_len_limit = -1;
if (scanf("%i", &page_len_limit) != 1)
{
printf("Ошибка при вводе длины страницы.%cВведите длину снова:", '\n');
while (getchar() != '\n');
continue;
}
if (page_len_limit < 1)
{
printf("Ошибка при вводе длины страницы.%cВведите длину снова:", '\n');
while (getchar() != '\n');
continue;
}
} while (page_len_limit < 1);
int words_counter = 0;
int lines_counter = 0;
for(int i = 0; i < input_string.length(); i++)
{
if (input_string[i] != '#') printf("%c", input_string[i]);
if (is_letter(input_string[i]) && !is_letter(input_string[i + 1])) words_counter++;
if (input_string[i] == '\n') lines_counter++;
if(words_counter >= line_len_limit)
{
printf("\n");
lines_counter++;
words_counter = 0;
}
if(lines_counter >= page_len_limit)
{
printf("\n-----РАЗРЫВ СТРАНИЦЫ-----\n\n");
lines_counter = 0;
}
}
return 0;
}