C++. Масиви рядків типу string. Приклади




C++. Масиви рядків типу string. Приклади

У даній темі наводяться приклади розв’язку найбільш поширених задач з масивами рядків типу string.


Зміст


Пошук на інших ресурсах:

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

 


Зв’язані теми