C++
Вимоги до звіту: Звіт повинен бути оформлений у вигляді електронного
документа: програмний код з коментарями, висновки про результати виконуваних дій
і копії екрану. Розмір файлу звіту до 2 МБ зі скріншотами.
ЗАВДАННЯ:
Задано рядок, яка складається з символів. Символи складаються в слова. Слова
відокремлюються одним або декількома пробілами. В кінці тексту ставиться крапка.
Текст містить не більше 255 символів. Виконати введення рядка, використовуючи
функцію cin.getline (s, 255) і обробку рядка відповідно до завдання.
1. Надрукувати найдовше і найкоротше слово в цьому рядку.
2. Надрукувати всі слова, які не містять голосних букв.
3. Надрукувати всі слова, які містять по одній цифрі.
4. Надрукувати всі слова, які збігаються з першим словом.
5. Перетворити рядок таким чином, щоб спочатку в ньому були надруковані
тільки букви, а потім тільки цифри, не змінюючи порядку проходження символів в
рядку.
6. Перетворити рядок так, щоб всі букви в ньому були відсортовані за алфавітом.
7. Перетворити рядок таким чином, щоб в його початку були записані слова, які
містять тільки цифри.
8. Прибрати з рядка всі зазначені символи і відповідно зменшити його розмір.
Ответы
#include <iostream>
#include <cstring>
#include <cctype> // для функції isdigit()
using namespace std;
int main() {
char str[256];
cout << "Введіть текст (максимум 255 символів): ";
cin.getline(str, 256);
// Змінні для завдання 1
char longest[256], shortest[256];
int longest_len = 0, shortest_len = 256;
// Змінні для завдання 2
cout << "Слова без голосних букв: ";
bool has_vowel;
// Змінні для завдання 3
cout << "Слова з однією цифрою: ";
bool has_digit;
// Змінні для завдання 4
const char* first_word = strtok(str, " ");
cout << "Слова, які збігаються з першим словом: " << first_word << " ";
// Змінні для завдання 5
char letters[256], digits[256];
int letters_len = 0, digits_len = 0;
// Змінні для завдання 6
char sorted_str[256];
strcpy(sorted_str, str);
for (int i = 0; i < strlen(sorted_str) - 1; i++) {
for (int j = i + 1; j < strlen(sorted_str); j++) {
if (sorted_str[j] < sorted_str[i]) {
char temp = sorted_str[i];
sorted_str[i] = sorted_str[j];
sorted_str[j] = temp;
}
}
}
cout << "Рядок з відсортованими буквами: " << sorted_str << endl;
// Змінні для завдання 7
char digits_first[256], non_digits[256];
int digits_first_len = 0, non_digits_len = 0;
// Змінні для завдання 8
char to_remove[] = {'.', ',', ';', ':', '!', '?', ' ', '\t'}; // символи, які треба видалити
cout << "Рядок без зазначених символів: ";
int i = 0, j = 0; // індекси для зсуву
while (str[i]) { // поки не досягли кінця рядка
bool remove_char = false;
for (int k = 0; k < 8; k++) { // перевіряємо, чи потрібно видаляти цей символ
if (str[i] == to_remove[k]) {
remove_char = true;
break;
}
}
if (!remove_char) { // якщо не потрібно видаляти, то залишаємо його на місці
str[j] = str[i];
j++;
}
i++;
}
str[j] = '\0'; // ставимо кінцевий символ на позицію j
cout << str << endl;
// Розбиваємо рядок на слова
char* word = strtok(str, " ");
while (word) {
has_vowel = false;
has_digit = false;
// Завдання 1: знаходимо найдовше і найкоротше слово
if (strlen(word) > longest_len) {
longest_len = strlen(word);
strcpy(longest, word);
}
if (strlen(word) < shortest_len) {
shortest_len = strlen(word);
strcpy(shortest, word);
}
// Завдання 2: виводимо слова без голосних букв
for (int i = 0; i < strlen(word); i++) {
if (word[i] == 'a' || word[i] == 'e' || word[i] == 'i' || word[i] == 'o' || word[i] == 'u' ||
word[i] == 'y' || word[i] == 'A' || word[i] == 'E' || word[i] == 'I' || word[i] == 'O' || word[i] == 'U' || word[i] == 'Y') {
has_vowel = true;
break;
}
}
if (!has_vowel) {
cout << word << " ";
}
// Завдання 3: виводимо слова з однією цифрою
for (int i = 0; i < strlen(word); i++) {
if (isdigit(word[i])) {
if (has_digit) { // якщо в слові більше однієї цифри, не будемо його виводити
break;
}
has_digit = true;
}
}
if (has_digit && !isdigit(word[1])) { // не виводимо числа, що починаються з 0
cout << word << " ";
}
// Завдання 4: виводимо слова, які збігаються з першим словом
if (strcmp(word, first_word) == 0 && word != first_word) {
cout << word << " ";
}
// Завдання 5: перетворюємо рядок так, щоб спочатку були надруковані тільки букви, а потім тільки цифри
for (int i = 0; i < strlen(word); i++) {