C++. Масиви рядків типу string. Приклади
У даній темі наводяться приклади розв’язку найбільш поширених задач з масивами рядків типу string.
Зміст
- 1. Створення масиву рядків типу string. Статичний та динамічний масив рядків
- 2. Ініціалізація масиву рядків типу string. Приклад
- 3. Приклад створення динамічного масиву рядків заданого розміру
- 4. Приклад введення рядків з клавіатури та формування масиву цих рядків
- 5. Приклад сортування масиву рядків методом вставки
- 6. Приклад пошуку заданого рядка у масиві рядків
- 7. Приклад визначення кількості рядків у масиві рядків згідно з заданою умовою
- Зв’язані теми
Пошук на інших ресурсах:
1. Створення масиву рядків типу string. Статичний та динамічний масив рядків
У старіших версіях компіляторів щоб працювати з типом string потрібно підключити модуль <string>
#include <string>
Для масиву рядків пам’ять можна виділяти
- статично. У цьому випадку вказується фіксоване константне значення масиву на етапі компіляції;
- динамічно з допомогою оператора new. У цьому випадку розмір масиву створюється динамічно і може задаватись у процесі виконання програми.
⇑
2. Ініціалізація масиву рядків типу string. Приклад
У прикладі ініціалізується масив рядків типу string. Пам’ять для масиву виділяється статично (фіксовано).
#include <iostream> #include <string> using namespace std; void main() { // Масиви рядків типу string // 1. Ініціалізація масиву рядків з вказанням розміру масиву const int N_DAYS = 7; string daysOfWeek[N_DAYS] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thirsday", "Friday", "Saturday" }; // Виведення масиву рядків на екран cout << "Array of days:\n"; for (int i = 0; i < N_DAYS; i++) { cout << "Day " << i << " = " << daysOfWeek[i] << ::endl; } // 2. Ініціалізація без вказання розміру масиву string Numbers[] { "One", "Two", "Three" }; // Виведення масиву на екран cout << "\nArray of Numbers:" << ::endl; for (int i = 0; i < 3; i++) cout << Numbers[i] << endl; }
Результат роботи програми
Array of days: Day 0 = Sunday Day 1 = Monday Day 2 = Tuesday Day 3 = Wednesday Day 4 = Thirsday Day 5 = Friday Day 6 = Saturday Array of Numbers: One Two Three
⇑
3. Приклад створення динамічного масиву рядків заданого розміру
У програмі з клавіатури вводиться розмір масиву n. Потім для цього масиву пам’ять виділяється динамічно.
#include <iostream> #include <string> using namespace std; void main() { // Масиви рядків типу string // Створення динамічного масиву рядків розміру n // 1. Оголосити масив рядків string *AS; // покажчик на тип string int n; // кількість елементів у масиві AS // 2. Ввід розміру масиву cout << "n = "; cin >> n; // 3. Перевірка на коректність вводу if (n <= 0) { cout << "Wrong value of n." << endl; return; } // 4. Динамічне виділення пам'яті для масиву AS AS = new string[n]; // 5. Заповнення масиву AS довільними значеннями for (int i = 0; i < n; i++) AS[i] = (char)('1' + i); // 6. Вивід масиву AS cout << "\nArray AS:" << ::endl; for (int i = 0; i < n; i++) cout << "AS[" << i << "] = " << AS[i].c_str() << endl; // 7. Після завершення роботи з масивом AS, // потрібно обов'язково звільнити виділену для нього пам'ять delete[] AS; }
Результат виконання програми
n = 7 Array AS: AS[0] = 1 AS[1] = 2 AS[2] = 3 AS[3] = 4 AS[4] = 5 AS[5] = 6 AS[6] = 7
⇑
4. Приклад введення рядків з клавіатури та формування масиву цих рядків
У прикладі послідовно вводяться рядки та формується масив цих рядків. Кінець вводу – пустий рядок “”.
#include <iostream> using namespace std; void main() { // Масиви рядків у C++. Рядки типу string // Організація вводу рядків з клавіатури та формування масиву // 1. Оголошення змінних string* AS; // масив рядків, які будуть вводитись, це є результат string* AS2; // додатковий масив рядків int count; // кількість елементів у масиві string s; // додаткова змінна-рядок char buf[80]; // буфер для вводу рядків // 2. Цикл вводу рядків, кінець вводу - пустий рядок "" cout << "Enter strings:\n"; count = 0; AS = nullptr; do { // 2.1. Ввести рядок у масив типу char[] cout << "=> "; cin.getline(buf, 80, '\n'); // рядки вводяться з пробілами // 2.2. Скопіювати рядок char[] в рядок типу string s = buf; // 2.3. Якщо введено не пустий рядок if (s != "") { // 2.3.1. Збільшити кількість рядків count++; // 2.3.2 Виділити пам'ять для нового масиву AS2 = new string[count]; // 2.3.3. Скопіювати дані з старого масиву в новий for (int i = 0; i < count - 1; i++) AS2[i] = AS[i]; // 2.3.4. Додати введений рядок в новий масив AS2[count - 1] = s; // 2.3.5. Звільнити пам'ять, виділену під старий (попередній) масив if (AS != nullptr) delete[] AS; // 2.3.6. Перенаправити покажчик з попереднього масиву AS на масив AS2 AS = AS2; } } while (s != ""); // 3. Вивести створений масив AS на екран cout << "\nArray AS is as follows:\n"; if (count > 0) for (int i = 0; i < count; i++) cout << "AS[" << i << "] = " << AS[i] << ::endl; else cout << "array AS is empty."; // 4. Після використання масиву AS звільнити пам'ять, виділену для нього delete[] AS; }
Результат виконання програми
Enter strings: => abc def => Hello world! => bestprog.net => This is a text. => Array AS is as follows: AS[0] = abc def AS[1] = Hello world! AS[2] = bestprog.net AS[3] = This is a text.
⇑
5. Приклад сортування масиву рядків методом вставки
У прикладі формується масив з count елементів. Потім відбувається сортування цього масиву та виведення результату на екран.
#include <iostream> using namespace std; void main() { // Масиви рядків у C++. Рядки типу string // Сортування масиву рядків методом вставки // 1. Оголошення змінних string* AS; // масив рядків, який потрібно посортувати int count; // кількість елементів у масиві string s; // додаткова змінна-рядок char buf[80]; // буфер для вводу рядків // 2. Ввести кількість елементів у масиві cout << "count = "; cin >> count; // 3. Перевірка, чи значення count коректне if (count <= 0) { cout << "Incorrect input."; return; } // 4. Виділити пам'ять для count рядків AS = new string[count]; // 5. Цикл вводу рядків у масив cout << "Enter strings:\n"; cin.ignore(4096, '\n'); for (int i = 0; i < count; i++) { // рядки вводяться з пробілами cout << "=> "; cin.getline(buf, 80, '\n'); AS[i] = buf; // скопіювати рядок } // 6. Виведення введеного масиву для перевірки cout << "\nArray AS:" << ::endl; for (int i = 0; i < count; i++) cout << "A[" << i << "] = " << AS[i] << ::endl; // 7. Сортування масиву AS в порядку зростання for (int i=0; i<count-1;i++) for (int j=i; j>=0;j--) if (AS[j] > AS[j + 1]) { // поміняти місцями рядки s = AS[j]; AS[j] = AS[j + 1]; AS[j + 1] = s; } // 8. Виведення посортованого масиву AS cout << "\nSorted array AS:\n"; for (int i = 0; i < count; i++) cout << "AS[" << i << "] = " << AS[i] << endl; // 9. Звільнення пам'яті, виділеної для масиву AS delete[] AS; }
Результат роботи програми
count = 8 Enter strings: => q w e => sds => ds sdjh => Adss => Dc kdshk => sdkjk => s1 s2 s3 => dd12 29918 Array AS: A[0] = q w e A[1] = sds A[2] = ds sdjh A[3] = Adss A[4] = Dc kdshk A[5] = sdkjk A[6] = s1 s2 s3 A[7] = dd12 29918 Sorted array AS: AS[0] = Adss AS[1] = Dc kdshk AS[2] = dd12 29918 AS[3] = ds sdjh AS[4] = q w e AS[5] = s1 s2 s3 AS[6] = sdkjk AS[7] = sds
⇑
6. Приклад пошуку заданого рядка у масиві рядків
У прикладі демонструється алгоритм пошуку рядка у масиві рядків.
#include <iostream> #include <string> using namespace std; void main() { // Масиви рядків у C++. Рядки типу string // Пошук рядка у масиві рядків // 1. Оголошення змінних string* AS; // масив рядків int count; // кількість елементів у масиві string s; // рядок, який потрібно знайти char buf[80]; // буфер для вводу рядків // 2. Ввести кількість елементів у масиві cout << "count = "; cin >> count; // 3. Перевірка, чи значення count коректне if (count <= 0) { cout << "Incorrect input."; return; } // 4. Виділити пам'ять для count рядків AS = new string[count]; // 5. Цикл вводу рядків у масив cout << "Enter strings:\n"; cin.ignore(4096, '\n'); for (int i = 0; i < count; i++) { // рядки вводяться з пробілами cout << "=> "; cin.getline(buf, 80, '\n'); AS[i] = buf; // скопіювати рядок } // 6. Виведення введеного масиву для перевірки cout << "\nArray AS:" << ::endl; for (int i = 0; i < count; i++) cout << "A[" << i << "] = " << AS[i] << ::endl; // 7. Ввід рядка, який потрібно знайти cout << endl << "Enter string:" << endl; cin.getline(buf, 80, '\n'); s = buf; // у змінній s - введений рядок // 8. Пошук рядка s у масиві AS bool f_is = false; for (int i = 0; i < count; i++) if (s == AS[i]) { // якщо рядок знайдено, f_is = true; break; // то вийти з циклу } // 9. Виведення результату if (f_is) cout << "String \"" << s << "\" is in the array AS." << endl; else cout << "String \"" << s << "\" is not in the array AS." << endl; // 10. Звільнення пам'яті, виділеної для масиву AS delete[] AS; }
Результат роботи програми
count = 5 Enter strings: => a s => b cd => ddd => ef ghi => jkl Array AS: A[0] = a s A[1] = b cd A[2] = ddd A[3] = ef ghi A[4] = jkl Enter string: ef ghi String "ef ghi" is in the array AS.
⇑
7. Приклад визначення кількості рядків у масиві рядків згідно з заданою умовою
Задано масив рядків. Потрібно обчислити кількість рядків, які починаються на символ ‘+’.
#include <iostream> #include <string> using namespace std; void main() { // Масиви рядків у C++. Рядки типу string // Підрахунок кількості входжень рядка у масиві рядків // 1. Оголошення змінних string* AS; // масив рядків int count; // кількість елементів у масиві int number; // кількість рядків, які починаються на '+' char buf[80]; // буфер для вводу рядків // 2. Ввести кількість елементів у масиві cout << "count = "; cin >> count; // 3. Перевірка, чи значення count коректне if (count <= 0) { cout << "Incorrect input."; return; } // 4. Виділити пам'ять для count рядків AS = new string[count]; // 5. Цикл вводу рядків у масив cout << "Enter strings:\n"; cin.ignore(4096, '\n'); for (int i = 0; i < count; i++) { // рядки вводяться з пробілами cout << "=> "; cin.getline(buf, 80, '\n'); AS[i] = buf; // скопіювати рядок } // 6. Виведення масиву AS для перевірки cout << "\nArray AS:" << ::endl; for (int i = 0; i < count; i++) cout << "A[" << i << "] = " << AS[i] << ::endl; // 7. Цикл обчислення number number = 0; for (int i = 0; i < count; i++) if ((AS[i].length() > 0) && (AS[i][0] == '+')) // якщо рядок непустий і перший символ '+' number++; // 8. Виведення результату cout << endl << "number = " << number << endl; // 9. Звільнення пам'яті, виділеної для масиву AS delete[] AS; }
Результат роботи програми
count = 7 Enter strings: => +as => -lskd lskd => bdc sldk => +200 => a+b => dn dd dy => fds sds Array AS: A[0] = +as A[1] = -lskd lskd A[2] = bdc sldk A[3] = +200 A[4] = a+b A[5] = dn dd dy A[6] = fds sds number = 2
⇑
Зв’язані теми
- Визначення масиву. Одновимірні масиви. Ініціалізація масиву
- Двовимірні масиви. Масиви рядків. Багатовимірні масиви
- Приклади розв’язку поширених задач з одновимірними масивами
- Приклади розв’язування задач на рядки символів
⇑