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
⇑
Связанные темы
- Определение массива. Одномерные массивы. Инициализация массива
- Двумерные массивы. Массивы строк. Многомерные массивы
⇑