Строки, как одномерные массивы символов

Пример работы с одномерным массивом

Краткие теоретические сведения

С использованием одномерных массивов и строк

Программирование циклических вычислительных процессов

Массив – конечномерная последовательность данных одного типа. Массив – объект сложного типа. Каждый элемент массива определяется именем массива и индексом (целое число), по которому к элементу массива производится доступ. Рассмотрим одномерные массивы. Индексы у массивов в языке С/C++ начинаются с 0. В программе одномерный массив объявляется следующим образом:

<Тип> <имя массива>[размер];

где, размер – количество элементов одномерного массива.

Размер массива может задаваться константой или константным выражением. Нельзя задавать массив переменного размера, для этого существует отдельный механизм – динамическое выделение памяти.

Пример объявления массива целого типа:

int a[5];

в массиве а первый элемент а[0], второй – а[1], …, пятый - а[4]. В языке С/C++ не проверяется выход индекса за пределы массива. Корректность использования индексов элементов массива должен контролировать программист.

В массиве а целого типа найти индекс и значение максимального элемента и переставить его с первым элементом. Программа также должна подсчитать количество положительных и отрицательных элементов данного мaссива.

Текст программы может быть следующим:

#include <stdio.h>

#include <conio.h>

void main(void)

{ int a[4]={-1,-20,4,100}; // объявление массива с инициализацией

// индексы принимают значения от 0 до 3

int i,index,max,kp,ko;

clrscr();

puts("\n ИСХОДНЫЙ МАССИВ\n");

for (i=0; i<4; i++)

printf("%d ",a[i]); // вывод элементов исходного массива

max=a[0]; kp=0; ko=0;

for (i=1; i<4; i++)

{ if (a[i]>max) {

max=a[i]; index=i; }

}

a[index]=zam; a[0]=max;

for (i=0;i<4;i++)

{

if (a[i]<0) ko=ko+1;

else kp=kp+1;

}

puts("\n РЕЗУЛЬТАТЫ РАБОТЫ ПРОГРАММЫ\n");

for (i=0; i<4; i++)

printf("%d ",a[i]); // Вывод элементов массива

printf("\n положительных элементов массива: %d \n",kp);

printf(" \n отрицательных элементов массива: %d,\

\n\n Press any key...",ko);

getch();

}

Работа со строками в языке С/C++ реализована путем использования одномерных мас­сивов типа char, т.е. строка символов – это одномерный массив типа char, заканчиваю­щийся нулевым байтом. Нулевой байт – это байт, каждый бит которого равен нулю, при этом для нулевого байта определена символьная константа ´ \0 ´(признак окончания строки или нуль-терминатор). Поэтому, если строка должна состоять из k символов, то в описании массива необходимо указать размер k+1.

Например, описание: char a[7], означает, что строка содержит шесть символов, а последний байт отведен под нуль-терминатор.

Строковая константа в языке С/C++ – это набор символов, заключенных в двойные кавычки. Например: “Лабораторная работа по строкам”. В конце строковой константы явно указывать символ ´ \0 ´ не нужно, так как это сделает компилятор языка С/C++.

Строки можно инициализиорвать при декларировании, например:

char S1[10]=”123456789”, S2[]=”12345”;

в последнем случае размер строки будет установлен по фактическому количеству символов.

Для ввода строки с клавиатуры дисплея используются две стандартные библи­отечные функции, прототипы которых приведены в файле stdio.h.

Функция scanf() вводит значения для строковых переменных спецификатором ввода %s. Но надо помнить, что функция scanf() вводит символы до появления первого символа “пробел”.

Библиотечная функция gets(), обеспечивает ввод строки с пробелами внутри этой строки. При этом ввод строки символов завершается нажатием клавиши ENTER.

Обе функции автоматически ставят в конец строки нулевой байт. И, кроме того, так как строка – это символьный массив, а имя массива – это указатель на его начало в памяти, то символ «&» перед именами строковых объектов при использовании этих функций указывать не надо.

Вывод строк производится функциями printf() или puts(). Обе функции выводят символьный массив до первого нулевого байта. Функция printf() не переводит курсор после вывода на начало новой строки, программист должен предусмотреть такой перевод в строке формата. Функия puts() автоматически переводит курсор после вывода строковой информации в начало новой строки.

Операции над строками, как объектом сложного типа, рекомендуется выполнять используя стандартные функции. Декларации функций для работы со строками размещены в файле string.h. Вот некоторые из наиболее часто используемых:

1. Функция strcpy (S1, S2) - копирует содержимое строки S2 в строку S1.

2. Функция strcat (S1, S2) - присоединяет строку S2 к строке S1 и помещает ее в массив, где находилась строка S1, при этом строка S2 не изменяется. Нулевой байт, который завершал строку S1, заменяется первым символом строки S2.

3. Функция strcmp (S1, S2) сравнивает строки S1 и S2 и возвращает значение =0, если строки равны, т.е. содержит одно и то же число одинаковых символов; значение <0, если S1<S2;значение >0, если S1>S2.

4. Функция strlen (S) возвращает длину строки, т.е. количество символов, начиная с нулевого и до нуль-терминатора, нулевой байт не учитывается.

5. Функции преобразования строки S в число:

целое: int atoi (S); длинное целое: long atol (S); действительное: double atof (S); при ошибке возвращает значение 0.

6. Функции преобразования числа V в строку S:

целое: itoa (int V,char S,int kod); длинное целое: ltoa (long V,char S,int kod); 2<=kod<=36, для отрицательных чисел kod=10.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: