Если вы помните, то мы уже говорили о массивах в C++ в наших предыдущих статьях. Массивы позволяют нам объявлять элементы данных различных типов. Массивы всех числовых типов данных идентичны по операциям и реализации, но массивы со строковыми типами данных отличаются.
В C++ строка может быть представлена в виде массива символов или с помощью строкового класса, поддерживаемого C++. Каждая строка или элемент массива завершается нулевым символом. Представление строк с помощью массива символов напрямую взято из языка C, поскольку в C нет строкового типа.
Реализация строковых массивов
В C++ строки могут быть представлены тремя способами:
- Использование двумерных массивов символов: это представление использует двумерные массивы, где каждый элемент представляет собой пересечение номера строки и столбца и представляет собой строку.
- Использование ключевого слова String: мы также можем использовать ключевое слово string в C++ для объявления и определения строковых массивов.
- Использование векторов STL: мы можем использовать векторы STL, в которых каждый элемент вектора является строкой.
Теперь давайте обсудим каждый из вышеперечисленных методов, а также посмотрим примеры программирования для каждого представления.
Использование двумерных массивов символов
Строковые массивы или массив строк могут быть представлены с помощью специальной формы двумерных массивов. В этом представлении мы используем двумерный массив символов типа для представления строки.
Первое измерение указывает количество элементов, т. е. строк в этом массиве, а второе измерение указывает максимальную длину каждого элемента в массиве.
Таким образом, мы можем использовать общее представление, как показано ниже:
char «stringarrayname» [«количество строк»] [«максимальная длина строки»] |
Например, рассмотрим следующее объявление:
char string_array[10] [20]; |
Приведенное выше объявление объявляет массив строк с именем string_array, который состоит из 10 элементов и длина каждого элемента не превышает 20.
Мы можем объявить и инициализировать массив животных с помощью строк следующим образом:
char animals [5] [10] = {“Lion”, “Tiger”, “Deer”, “Ape”, “Kangaroo”}; |
Давайте посмотрим на пример программирования, использующий концепцию двумерных массивов символов:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#include <iostream> using namespace std; int main() { char strArray[5] [6] = {"one", "two", "three", "four", "five"}; cout<<"String array is as follows:"<<endl; for(int i=0;i<5;i++) { cout<<"Element "<<i<<"= "<<strArray[i]<<endl; } return 0; } |
Вывод данных:
String array is as follows: Element 0= one Element l= two Element 2= three Element 3= four Element 4= five |
В приведенной выше программе мы объявили массив строк с именем strArray размера 5 с максимальной длиной каждого элемента равной 10. В программе мы инициируем цикл for для отображения каждого элемента массива. Обратите внимание, что нам просто нужно получить доступ к массиву, используя первое измерение, чтобы отобразить элемент.
Легкий доступ к элементам — одно из основных преимуществ двумерных массивов. Они действительно просты в программировании.
Основным недостатком этого типа представления является то, что как размеры массива, т.е. количество элементов, так и максимальная длина элемента фиксированы и не могут быть изменены по нашему желанию.
Во-вторых, мы указываем максимальную длину каждого элемента в качестве второго измерения при объявлении массива. Если длина строки указана как 100, а у нас есть все элементы, которые меньше по длине, то память тратится впустую.
Использование строкового ключевого слова
Здесь мы используем ключевое слово «string» в C++ для объявления массива строк. В отличие от массивов символов, здесь у нас есть только одномерный массив. Единственное измерение указывает количество строк в массиве.
Общий синтаксис для объявления массива строк с использованием ключевого слова string приведен ниже:
string “array name” [“количество строк”]; |
Обратите внимание, что здесь мы не указываем максимальную длину строки. Это означает, что нет ограничений на длину элементов массива.
Например, мы можем объявить массив имен цветов следующим образом:
string colors[5]; |
Мы можем дополнительно инициализировать этот массив так, как показано ниже:
string colors[5] = {“Red”, “Green”, “Blue”, “Orange”, “Brown”}; |
Ниже приведена программа на C++ для понимания ключевого слова string и его использования в массиве строк:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#include <iostream> using namespace std; int main() { string numArray[5] = {"one", "two", "three", "four", "five"}; cout<<"String array is as follows:"<<endl; for(int i=0;i<5;i++) { cout<<"Element "<<i<<"= "<<numArray[i]<<endl; } return 0; } |
Вывод данных:
String array is as follows: Element 0= one Element l= two Element 2= three Element 3= four Element 4= five |
Мы изменили нашу предыдущую программу массива символов и продемонстрировали использование ключевого слова string. Вывод данных программы тот же, но способ его достижения другой, поскольку мы определяем массив строк с помощью ключевого слова string.
Обратите внимание, что массив строк с использованием ключевого слова string имеет преимущество — нет ограничений на длину строк в массиве. Поскольку ограничений нет, мы также не тратим место в памяти.
С другой стороны, этот массив имеет фиксированный размер. Нам нужно заранее объявить размер массива.
Использование векторов STL
Мы также можем использовать векторы STL для объявления и определения динамических массивов. Таким образом, чтобы определить массив строк, мы можем иметь вектор STL строкового типа.
Это объявление массива строк с использованием вектора показано ниже:
vector<string> “stringarray_Name”; |
Ссылаясь на приведенное выше объявление, мы можем объявить векторные «субъекты» следующим образом:
vector<string> mysubjects; |
Обратите внимание, что мы можем назначать элементы вектору с помощью метода «push_back» или любых других векторных методов STL.
Ниже приведен пример программирования с использованием C++, демонстрирующий использование вектора STL для представления массива строк:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#include <iostream> #include <vector> using namespace std; int main() { vector <string> myNumbers; myNumbers.push_back("one"); myNumbers.push_back("two"); myNumbers.push_back("three"); myNumbers.push_back("four"); myNumbers.push_back("five"); cout<<"String array is as follows:"<<endl; for(int i=0;i<5;i++) { cout<<"Element "<<i<<"= "<<myNumbers[i]<<endl; } return 0; } |
Вывод данных:
String array is as follows: Element 0= one Element l= two Element 2= three Element 3= four Element 4= five |
В приведенной выше программе есть вектор STL myNumbers типа string. Далее мы добавляем элементы в этот вектор, используя метод push_back, а затем отображаем каждый из элементов вектора.
При работе вектора STL и массива строк, нет ограничения на количество элементов в массиве или максимальную длину каждого элемента. Мы видим, что массив строк с использованием векторов полностью динамичен и может динамически уменьшаться или увеличиваться.
Какое представление выбрать для использования?
Теперь, когда мы рассмотрели все три представления строковых массивов, мы можем сделать вывод, что из всех трех представлений векторное представление является лучшим, поскольку оно является динамическим по своей природе.
Это зависит от назначения и требований массива строк. Когда у нас есть требование, что нам нужен массив строк фиксированного размера, и мы знаем точные данные, которые войдут в массив строк, тогда мы можем перейти к массиву символов или строковому представлению.
Когда мы хотим, чтобы массив строк динамически увеличивался или уменьшался, мы можем прибегнуть к векторному представлению, поскольку это поможет нам разрабатывать программы за счет динамического изменения массива.
Итог
Строковые массивы — это специальные массивы, содержащие данные в виде строк. Это означает, что каждый элемент массива представляет собой строку, оканчивающуюся нулевым символом.
Мы подробно обсудили три представления массива строк, а также их плюсы и минусы. В зависимости от наших требований; мы можем использовать любое представление массива строк, которое подходит для нашей реализации.
В следующей статье мы обсудим некоторые популярные строковые функции в C++, такие как: getline substring, string length, string find, split string и т. д.
С Уважением, МониторБанк