Добавил:
КТ Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

var21 / лаб6_в21

.docx
Скачиваний:
1
Добавлен:
04.10.2024
Размер:
25.67 Кб
Скачать

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;

}

Соседние файлы в папке var21