Перейти к содержимому

Как заполнить массив строками с

  • автор:

Массивы

В структуре данных массива можно хранить несколько переменных одного типа. Чтобы объявить массив, следует указать тип его элементов. Если требуется, чтобы массив мог хранить элементы любого типа, можно указать object в качестве его типа. В унифицированной системе типов C# все типы, стандартные и определяемые пользователем, ссылочные типы и типы значений напрямую или косвенно наследуются из Object.

type[] arrayName; 

Массив имеет следующие свойства:

  • Массив может быть одномерным, многомерным или многомерным.
  • Число измерений задается при объявлении переменной массива. Длина каждого измерения устанавливается при создании экземпляра массива. Эти значения нельзя изменить во время существования экземпляра.
  • Массив массивов является массивом массивов, и каждый массив элементов имеет значение null по умолчанию.
  • Массивы индексируются от нуля: массив с n элементами индексируется от 0 до n-1 .
  • Элементы массива могут иметь любой тип, в том числе тип массива.
  • Типы массивов — это ссылочные типы, производные от абстрактного базового типа Array. Все массивы реализуют IList и IEnumerable. Для итерации по массиву можно использовать оператор foreach. Одномерные массивы также реализуют IList и IEnumerable .

Элементы массива можно инициализировать в известные значения при создании массива. Начиная с C# 12, все типы коллекций можно инициализировать с помощью выражения Collection. Элементы, которые не инициализированы, имеют значение по умолчанию. Значение по умолчанию — это 0-разрядный шаблон. Все ссылочные типы (включая типы, не допускающие значение NULL), имеют значения null . Все типы значений имеют 0-разрядные шаблоны. Это означает, Nullable.HasValue что свойство имеет false значение, и Nullable.Value свойство не определено. В реализации Value .NET свойство создает исключение.

В следующих примерах создаются одномерные массивы, многомерные массивы и массивы массивов:

// Declare a single-dimensional array of 5 integers. int[] array1 = new int[5]; // Declare and set array element values. int[] array2 = [1, 2, 3, 4, 5, 6]; // Declare a two dimensional array. int[,] multiDimensionalArray1 = new int[2, 3]; // Declare and set array element values. int[,] multiDimensionalArray2 = < < 1, 2, 3 >, < 4, 5, 6 >>; // Declare a jagged array. int[][] jaggedArray = new int[6][]; // Set the values of the first array in the jagged array structure. jaggedArray[0] = [1, 2, 3, 4]; 

Одномерные массивы

Одномерный массив — это последовательность таких элементов. Доступ к элементу осуществляется через его индекс. Индекс — это порядковое положение в последовательности. Первый элемент в массиве находится в индексе 0 . Для создания одномерного массива используется оператор new и указывается тип элементов массива и число элементов. В следующем примере объявляются и инициализируется одномерные массивы:

int[] array = new int[5]; string[] weekDays = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; Console.WriteLine(weekDays[0]); Console.WriteLine(weekDays[1]); Console.WriteLine(weekDays[2]); Console.WriteLine(weekDays[3]); Console.WriteLine(weekDays[4]); Console.WriteLine(weekDays[5]); Console.WriteLine(weekDays[6]); /*Output: Sun Mon Tue Wed Thu Fri Sat */ 

Первое объявление объявляет неинициализированный массив из пяти целых чисел от array[0] до array[4] . Элементы массива инициализируются до значения по умолчанию для типа элемента. Для целых чисел это 0 . Второе объявление объявляет массив строк и инициализирует все семь значений этого массива. Оператор foreach выполняет итерацию элементов массива weekday и выводит все значения. Для одномерных массивов оператор обрабатывает элементы в увеличении порядка индексов foreach , начиная с индекса 0 и заканчивая индексом Length — 1 .

Передача одномерных массивов в качестве аргументов

Инициализированный одномерный массив можно передать в метод. В следующем примере массив строк инициализируется и передается в качестве аргумента в метод DisplayArray для строк. Этот метод отображает элементы массива. Затем метод ChangeArray размещает элементы массива в обратном порядке, а метод ChangeArrayElements изменяет первые три элемента массива. После возврата каждого метода метод DisplayArray показывает, что передача массива по значению не препятствует изменению элементов массива.

class ArrayExample < static void DisplayArray(string[] arr) =>Console.WriteLine(string.Join(" ", arr)); // Change the array by reversing its elements. static void ChangeArray(string[] arr) => Array.Reverse(arr); static void ChangeArrayElements(string[] arr) < // Change the value of the first three array elements. arr[0] = "Mon"; arr[1] = "Wed"; arr[2] = "Fri"; >static void Main() < // Declare and initialize an array. string[] weekDays = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; // Display the array elements. DisplayArray(weekDays); Console.WriteLine(); // Reverse the array. ChangeArray(weekDays); // Display the array again to verify that it stays reversed. Console.WriteLine("Array weekDays after the call to ChangeArray:"); DisplayArray(weekDays); Console.WriteLine(); // Assign new values to individual array elements. ChangeArrayElements(weekDays); // Display the array again to verify that it has changed. Console.WriteLine("Array weekDays after the call to ChangeArrayElements:"); DisplayArray(weekDays); >> // The example displays the following output: // Sun Mon Tue Wed Thu Fri Sat // // Array weekDays after the call to ChangeArray: // Sat Fri Thu Wed Tue Mon Sun // // Array weekDays after the call to ChangeArrayElements: // Mon Wed Fri Wed Tue Mon Sun 

Многомерные массивы

Массивы могут иметь несколько измерений. Например, следующие объявления создают четыре массива: два имеют два измерения, два имеют три измерения. Первые два объявления объявляют длину каждого измерения, но не инициализировать значения массива. Во втором двух объявлениях используется инициализатор для задания значений каждого элемента в многомерном массиве.

int[,] array2DDeclaration = new int[4, 2]; int[,,] array3DDeclaration = new int[4, 2, 3]; // Two-dimensional array. int[,] array2DInitialization = < < 1, 2 >, < 3, 4 >, < 5, 6 >, < 7, 8 >>; // Three-dimensional array. int[,,] array3D = new int[,,] < < < 1, 2, 3 >, < 4, 5, 6 >>, < < 7, 8, 9 >, < 10, 11, 12 >> >; // Accessing array elements. System.Console.WriteLine(array2DInitialization[0, 0]); System.Console.WriteLine(array2DInitialization[0, 1]); System.Console.WriteLine(array2DInitialization[1, 0]); System.Console.WriteLine(array2DInitialization[1, 1]); System.Console.WriteLine(array2DInitialization[3, 0]); System.Console.WriteLine(array2DInitialization[3, 1]); // Output: // 1 // 2 // 3 // 4 // 7 // 8 System.Console.WriteLine(array3D[1, 0, 1]); System.Console.WriteLine(array3D[1, 1, 2]); // Output: // 8 // 12 // Getting the total count of elements or the length of a given dimension. var allLength = array3D.Length; var total = 1; for (int i = 0; i < array3D.Rank; i++) < total *= array3D.GetLength(i); >System.Console.WriteLine($" equals "); // Output: // 12 equals 12 

Для многомерных массивов элементы пересекаются таким образом, что индексы самого правого измерения увеличиваются сначала, а затем следующее левое измерение и т. д. до самого левого индекса. В следующем примере перечисляется как 2D, так и трехмерный массив:

int[,] numbers2D = < < 9, 99 >, < 3, 33 >, < 5, 55 >>; foreach (int i in numbers2D) < System.Console.Write($""); > // Output: 9 99 3 33 5 55 int[,,] array3D = new int[,,] < < < 1, 2, 3 >, < 4, 5, 6 >>, < < 7, 8, 9 >, < 10, 11, 12 >> >; foreach (int i in array3D) < System.Console.Write($""); > // Output: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 

В массиве 2D можно считать левый индекс строкой и правым индексом в качестве столбца .

Однако с многомерными массивами, используя вложенный цикл, вы можете более контролировать порядок обработки элементов массива:

int[,,] array3D = new int[,,] < < < 1, 2, 3 >, < 4, 5, 6 >>, < < 7, 8, 9 >, < 10, 11, 12 >> >; for (int i = 0; i < array3D.GetLength(0); i++) < for (int j = 0; j < array3D.GetLength(1); j++) < for (int k = 0; k < array3D.GetLength(2); k++) < System.Console.Write($""); > System.Console.WriteLine(); > System.Console.WriteLine(); > // Output (including blank lines): // 1 2 3 // 4 5 6 // // 7 8 9 // 10 11 12 // 

Передача многомерных массивов в качестве аргументов

Инициализированный многомерный массив можно передать в метод так же, как и одномерный массив. В следующем коде показано разделяемое объявление метода печати, который принимает в качестве аргумента двухмерный массив. Новый массив можно инициализировать и передать за один шаг, как показано в следующем примере. В следующем примере инициализируется двухмерный массив целых чисел, который передается в метод Print2DArray . Этот метод отображает элементы массива.

static void Print2DArray(int[,] arr) < // Display the array elements. for (int i = 0; i < arr.GetLength(0); i++) < for (int j = 0; j < arr.GetLength(1); j++) < System.Console.WriteLine("Element(,)=", i, j, arr[i, j]); > > > static void ExampleUsage() < // Pass the array as an argument. Print2DArray(new int[,] < < 1, 2 >, < 3, 4 >, < 5, 6 >, < 7, 8 >>); > /* Output: Element(0,0)=1 Element(0,1)=2 Element(1,0)=3 Element(1,1)=4 Element(2,0)=5 Element(2,1)=6 Element(3,0)=7 Element(3,1)=8 */ 

Массивы массивов

Массив массивов — это массив, элементы которого являются массивами и могут быть различных размеров. Многообразный массив иногда называется массивом массивов. Его элементы являются ссылочными типами и инициализированы в null . В следующих примерах показано, как объявлять и инициализировать массивы массивов, а также получать доступ к ним. Первый пример объявляется jaggedArray в одной инструкции. Каждый содержащийся массив создается в последующих инструкциях. Второй пример jaggedArray2 объявлен и инициализирован в одной инструкции. Массивы массивов и многомерные массивы можно смешивать. Последним примером jaggedArray3 является объявление и инициализация одномерного массива, содержащего три двухмерных элемента массива разных размеров.

int[][] jaggedArray = new int[3][]; jaggedArray[0] = [1, 3, 5, 7, 9]; jaggedArray[1] = [0, 2, 4, 6]; jaggedArray[2] = [11, 22]; int[][] jaggedArray2 = [ [1, 3, 5, 7, 9], [0, 2, 4, 6], [11, 22] ]; // Assign 77 to the second element ([1]) of the first array ([0]): jaggedArray2[0][1] = 77; // Assign 88 to the second element ([1]) of the third array ([2]): jaggedArray2[2][1] = 88; int[][,] jaggedArray3 = [ new int[,] < , >, new int[,] < , , >, new int[,] < , , > ]; Console.Write("", jaggedArray3[0][1, 0]); Console.WriteLine(jaggedArray3.Length); 

Элементы массива должны быть инициализированы перед их использованием. Каждый из элементов является массивом. Кроме того, можно использовать инициализаторы для заполнения элементов массива значениями. При использовании инициализаторов не требуется размер массива.

В этом примере создается массив, элементы которого являются массивами. Все элементы массива имеют разный размер.

// Declare the array of two elements. int[][] arr = new int[2][]; // Initialize the elements. arr[0] = [1, 3, 5, 7, 9]; arr[1] = [2, 4, 6, 8]; // Display the array elements. for (int i = 0; i < arr.Length; i++) < System.Console.Write("Element(): ", i); for (int j = 0; j < arr[i].Length; j++) < System.Console.Write("", arr[i][j], j == (arr[i].Length - 1) ? "" : " "); > System.Console.WriteLine(); > /* Output: Element(0): 1 3 5 7 9 Element(1): 2 4 6 8 */ 

Неявно типизированные массивы

Можно создать неявно типизированный массив, в котором тип экземпляра массива выводится из элементов, указанных в инициализаторе массива. Правила для любой неявно типизированной переменной также применяются к неявно типизированным массивам. Дополнительные сведения см. в разделе Неявно типизированные локальные переменные.

В следующих примерах показано, как создать неявно типизированный массив:

int[] a = new[] < 1, 10, 100, 1000 >; // int[] // Accessing array Console.WriteLine("First element: " + a[0]); Console.WriteLine("Second element: " + a[1]); Console.WriteLine("Third element: " + a[2]); Console.WriteLine("Fourth element: " + a[3]); /* Outputs First element: 1 Second element: 10 Third element: 100 Fourth element: 1000 */ var b = new[] < "hello", null, "world" >; // string[] // Accessing elements of an array using 'string.Join' method Console.WriteLine(string.Join(" ", b)); /* Output hello world */ // single-dimension jagged array int[][] c = [ [1,2,3,4], [5,6,7,8] ]; // Looping through the outer array for (int k = 0; k < c.Length; k++) < // Looping through each inner array for (int j = 0; j < c[k].Length; j++) < // Accessing each element and printing it to the console Console.WriteLine($"Element at c[][] is: "); > > /* Outputs Element at c[0][0] is: 1 Element at c[0][1] is: 2 Element at c[0][2] is: 3 Element at c[0][3] is: 4 Element at c[1][0] is: 5 Element at c[1][1] is: 6 Element at c[1][2] is: 7 Element at c[1][3] is: 8 */ // jagged array of strings string[][] d = [ ["Luca", "Mads", "Luke", "Dinesh"], ["Karen", "Suma", "Frances"] ]; // Looping through the outer array int i = 0; foreach (var subArray in d) < // Looping through each inner array int j = 0; foreach (var element in subArray) < // Accessing each element and printing it to the console Console.WriteLine($"Element at d[][] is: "); j++; > i++; > /* Outputs Element at d[0][0] is: Luca Element at d[0][1] is: Mads Element at d[0][2] is: Luke Element at d[0][3] is: Dinesh Element at d[1][0] is: Karen Element at d[1][1] is: Suma Element at d[1][2] is: Frances */ 

В предыдущем примере обратите внимание, что с неявно типизированными массивами квадратные скобки не используются слева от инструкции инициализации. Кроме того, многомерные массивы инициализированы так new [] же, как и одномерные массивы.

При создании анонимного типа, содержащего массив, этот массив необходимо неявно типизировать в инициализаторе объекта типа. В следующем примере contacts представляет собой неявный типизированный массив анонимных типов, каждый из которых содержит массив с именем PhoneNumbers . Ключевое var слово не используется внутри инициализаторов объектов.

var contacts = new[] < new < Name = " Eugene Zabokritski", PhoneNumbers = new[] < "206-555-0108", "425-555-0001" >>, new < Name = " Hanying Feng", PhoneNumbers = new[] < "650-555-0199" >> >; 

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

Создание и использование массивов строк в Visual C++

В этой статье представлен пример кода, показывающий, как создавать и использовать массивы строк в Visual C++.

Исходная версия продукта: Visual C++
Исходный номер базы знаний: 310809

Аннотация

В этой статье показано, как использовать управляемый C++ для создания и использования массивов строк в Visual C++ .NET и Visual C++. Хотя в примере используется двумерный строковый массив, сведения также могут применяться к одномерному массиву строк или многомерному массиву строк.

Инициализация массива

Инициализация нового экземпляра двумерного __gc массива, включающего элементы указателя на String класс :

Int32 nRows, nColumns; nRows = 10; nColumns = 10; String* myStringArray [,]= new String* [nRows,nColumns]; 

Затем заполните массив строк:

String* myString = "This is a test"; myStringArray[x,y] = myString; 

Переменные x и y являются заполнителями для допустимых Int32 значений или переменных, которые указывают подстрочные значения массива. Массив __gc отсчитывается от нуля.

Полный пример кода

#using #include using namespace System; int _tmain(void)

Для успешной компиляции предыдущего примера кода необходимо добавить параметр компилятора поддержки среды CLR в Visual Studio. Чтобы добавить параметр компилятора поддержки среды CLR в Visual Studio, выполните следующие действия.

Примечание. — это заполнитель для имени проекта.

Дополнительные сведения о параметре компилятора поддержки среды CLR см. в разделе /clr (компиляция CLR).

Обратная связь

Были ли сведения на этой странице полезными?

Как заполнить массив-строку одной командой?

Как заполнить одномерный массив единовременно, то есть не по одному элементу (первое число — Enter — второе число — Enter — . ), а например (1 2 3 4 5 6 7 8 Enter), как обработать подобный ввод?

Отслеживать
11 1 1 золотой знак 2 2 серебряных знака 8 8 бронзовых знаков
задан 21 дек 2014 в 14:09
1,294 16 16 серебряных знаков 38 38 бронзовых знаков

4 ответа 4

Сортировка: Сброс на вариант по умолчанию

Получил в ходе экспериментов:

int a[5]; for (int i = 0; i < 5; i++) cin >> a[i]; 

Отслеживать
ответ дан 21 дек 2014 в 15:45
1,294 16 16 серебряных знаков 38 38 бронзовых знаков

Оба случая одинаково

#include #include . int array[N]; for (int i = 0; i < N; i++) if (scanf("%d", array + i) != 1) errx(EX_DATAERR, "Bad input"); 

Отслеживать
ответ дан 21 дек 2014 в 15:22
45.9k 6 6 золотых знаков 47 47 серебряных знаков 115 115 бронзовых знаков
avp, можно ли обойтись cin, cout?
21 дек 2014 в 15:33

Конечно, можно. Суть не меняется. Вы про потоки ввода-вывода почитайте что-нибудь и поэкспериментируйте немного.

21 дек 2014 в 15:42

#include using namespace std; int main()< int arr[3]; cin >> arr[0] >> arr[1] >> arr[2]; // обеспечивает ввод трех чисел разделенных пробелами и подтверждение клавишей enter cout

Отслеживать
ответ дан 21 дек 2014 в 16:58
10k 14 14 золотых знаков 53 53 серебряных знака 118 118 бронзовых знаков

этот код отлично введет, даже если на вход подать так 5105 . Задача куда интереснее, если нужно, чтобы enter был как раз "окончанием ввода.

21 дек 2014 в 17:19

@KoVadim такой подход также отлично ведет себя со смешанными данными. А я вообще пришел к выводу, что надо избавлять себя от сишных конструкций, чтоб код логичней ставал и проще к чтению.

21 дек 2014 в 17:24

@KoVadim а насчет вашего интереса то он скорей закончитца на этом cplusplus.com/reference/istream/istream/getline

21 дек 2014 в 17:36
я знаю о getline. Но тогда нужна ещё одна функция, типа "split". А ТС хочет "в одну строку".
21 дек 2014 в 18:04
ну можно прочитать getline'om как string и потом sstream'ом распарсить. не?
22 дек 2014 в 18:32

Чтобы прочитать неизвестное заранее количество разделённых пробелами целых чисел, можно использовать vector и istream_iterator :

std::istream_iterator numbers(std::cin), eof; std::vector a(numbers, eof); 
#include // copy #include #include #include int main() < std::istream_iteratornumbers(std::cin), eof; std::vector a(numbers, eof); std::copy(a.begin(), a.end(), std::ostream_iterator(std::cout, "\n")); > 

std::copy() используется, чтобы напечатать каждое число из вектора на новой строке.

$ g++ read-vector.cc -o read-vector && echo 1 2 3 4 5 6 7 8 | ./read-vector 
1 2 3 4 5 6 7 8 

C++. Массивы строк типа string . Примеры

В данной теме приводятся примеры решения наиболее распространенных задач с массивами строк типа string .

Поиск на других ресурсах:

1. Создание массива строк типа string . Статический и динамический массив строк

В старших версиях компиляторов чтобы работать с типом string нужно подключить модуль

#include

Для массива строк память можно выделять

  • статически. В этом случае указывается фиксированное константное значение массива на этапе компиляции;
  • динамически с помощью оператора new . В этом случае размер массива создается динамически и может задаваться в процессе выполнения программы.
2. Инициализация массива строк типа string . Пример

В примере инициализируется массив строк типа string . Память для массива выделяется статически (фиксированно).

#include #include 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 " color: #008000;">// 2. Инициализация без указания размера массива string Numbers[] < "One", "Two", "Three" >; // Вывод массива на экран cout "\nArray of Numbers:" for (int i = 0; i

Результат работы программы

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 #include using namespace std; void main() < // Массивы строк типа string // Создание динамического массива строк размера n // 1. Объявить массив строк string *AS; // указатель на тип string int n; // количество элементов в массиве AS // 2. Ввести размер массива cout "n color: #008000;"> // 3. Проверка на корректность ввода if (n <= 0) < cout "Wrong value of n." 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:" for (int i = 0; i < n; i++) cout "AS[" << i "] color: #008000;">// 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 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 "] color: #0000ff;">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 using namespace std; void main() < // Массивы строк в C++. Строки типа string // Сортировка массива строк методом вставки // 1. Объявление переменных string* AS; // массив строк, который нужно отсортировать int count; // количество элементов в массиве string s; // дополнительная переменная-строка char buf[80]; // буфер для ввода строк // 2. Ввести количество элементов в массиве cout "count color: #008000;">// 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:" for (int i = 0; i < count; i++) cout "A[" << i "] color: #008000;">// 7. Сортировка массива AS по возрастанию for (int i=0; ifor (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 "] color: #008000;">// 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 #include using namespace std; void main() < // Массивы строк в C++. Строки типа string // Поиск строки в массиве строк // 1. Объявление переменных string* AS; // массив строк int count; // количество элементов в массиве string s; // искомая строка char buf[80]; // буфер для ввода строк // 2. Ввести количество элементов в массиве cout "count color: #008000;">// 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:" for (int i = 0; i < count; i++) cout "A[" << i "] color: #008000;"> // 7. Ввод искомой строки cout << endl "Enter string:" '\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." else cout "String \"" << s "\" is not in the array AS." // 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 #include using namespace std; void main() < // Массивы строк в C++. Строки типа string // Подсчет количества вхождений строки в массиве строк // 1. Объявление переменных string* AS; // массив строк int count; // количество элементов в массиве int number; // количество строк, которые начинаются на '+' char buf[80]; // буфер для ввода строк // 2. Ввести количество элементов в массиве cout "count color: #008000;"> // 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:" for (int i = 0; i < count; i++) cout "A[" << i "] color: #008000;">// 7. Цикл вычисления number number = 0; for (int i = 0; i < count; i++) if ((AS[i].length() > 0) && (AS[i][0] == '+')) // если строка непустая и первый символ '+' number++; // 8. Вывод результата cout << endl "number color: #008000;">// 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

Связанные темы

  • Определение массива. Одномерные массивы. Инициализация массива
  • Двумерные массивы. Массивы строк. Многомерные массивы

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *