Операции со строками — это операции с последовательностями символов.
Введение
В составе программного блока строки могут выступать в следующих качествах:
- В формате строковых констант.
- Символьные массивы.
- Посредством указателя, что тип является символьным.
- В формате строкового массива.
Кроме этого, необходимо предусмотреть определённые объёмы памяти, где будут сохраняться строки. Любой последовательный символьный набор, который заключён в кавычки, может восприниматься в качестве строковой константы. Чтобы иметь возможность корректно вывести строку, необходимо её заканчивать комбинацией «\0». Если объявляется строковая константа, то эта комбинация прибавляется к ней по умолчанию. То есть, последовательный набор знаков, которые заявлены строковой константой, разместится в компьютерной памяти вместе с нулевым байтом. Для сохранения этих данных назначается комплект ячеек памяти. Это означает, что строка является символьным массивом. Чтобы сохранить в виде кода один символьный знак, в памяти выделяется один байт.
Операции со строками
Почти все действия языка Си, в которых участвуют строки, применяют систему указателей. Чтобы разместить строки символов в памяти нужно:
- Выделить участок памяти для массива.
- Осуществить процедуру, позволяющую инициализировать строку.
Чтобы предоставить память для сохранения строки, допустимо воспользоваться процедурами динамического распределения памяти. Обязательно нужно учесть достаточный строчный размер:
char *name;
name = (char*)malloc(10);
scanf("%9s", name);
Здесь строка вводится функцией scanf(), и необходимо помнить, что её размер составляет максимум девять знаков. Оканчиваться строка должна комбинацией \0. Но следует отметить, что функция scanf() служит больше для задания не строчных знаков, а слов. Существует ещё формат "%s", позволяющий выполнить ввод строки вплоть до очередного пустого символа, например, пробела, табуляции или символа перевода строки. А, чтобы ввести всю строку вместе с пробелами, можно применить такой вариант:
char gets(char );
или её аналог:
char gets_s(char );
Аргументом функции пересылается указатель строки, куда выполняется ввод. Функция выдаёт запрос пользователю на ввод строки, которую она последовательно пересылает в массив до момента нажатия пользователем клавиши Enter.
Чтобы вывести строку, возможно использование указанных выше методов:
printf("%s", str); // str — является указателем строки.
Или в урезанном виде:
printf(str);
Можно применить так же:
int puts (char *s);
Она выполняет печать строчных данных S и перевод курсора к новой строке (что отличает её от printf()). Функцию puts() ещё возможно применить, чтобы вывести строковые константы, которые закрыты в кавычки.
Чтобы выполнить ввод символьного знака, необходимо применить соответствующую функцию:
char getchar();
Она выполняет возврат величины символа, который вводится с клавиатуры. Этот способ можно использовать для сохранения консольного окна после завершения работы программы до нажатия клавиши Ввод.
В качестве функции, используемой для вывода символов, применяется эта:
char putchar(char);
Она выполняет возврат значения выводимого символа и отображает на мониторе символ, который передаётся как аргумент.
Для внедрения в строковую константу необходимых служебных символов, применяются специальные символьные комбинации. Например, если надо внедрить в строку символику «двойные кавычки», перед ним нужно вставить знак обратный слеш: \». Под строковые константы отводится статическая память. Адрес начала символьного набора, заключённого в двойные кавычки, воспринимается в качестве адреса строки. Строковые константы могут использоваться для формирования пользовательского диалога в командах типа printf(). Когда определяется символьный массив, нужно обозначить компилятору требуемый для массива объём памяти.
char m[82];
Компилятор способен сам определить объём символьного массива, когда инициализация массива задаётся при объявлении как строковая константа:
char m2[]="Гористые скалы уснули весной.";
char m3[]={«Т», «р», «о», «п», «ы», «в», «г», «о», «р», «а», «х», «п», «а», «х», «н», «у», «т», «в», «о», «д», «о», «й»,'\0'};
В данном случае m2 и m3 выступают как указатели на начальные компоненты массивов:
m2 аналогично &m2[0]
m2[0] обозначает ‘Г’
m2[1] обозначает ‘o’
m3 обозначает &m3[0]
m3[2] обозначает ‘о’
Когда объявляется символьный массив, и он инициализируется как строковая константа, имеется возможность явного указания его размера. Но при этом заявленный объём массива обязан превышать объём строковой константы, которая его инициализирует:
char m2[80]=" Гористые скалы уснули весной.";
Чтобы задать строку, можно сделать так:
char *m4;
При этом, если объявляется массив переменной m4, то возможно назначить адрес массива:
m4 = m3;
*m4 аналогично m3[0]='Т'
*(m4+1) аналогично m3[1]='р'
В данном случае m3 выступает как фиксированный указатель. Изменять m3 невозможно, поскольку это влечёт за собой смену адреса массива в памяти. Для m4 таких ограничений нет. К указателю может применяться процедура смещения на очередной символ:
m4++;
Массивы символьных строк
Бывают моменты, когда требуется описать массив символьных строк. Тогда возможно применять строковый индекс, чтобы иметь возможность обращаться к набору различных строк.
char *poet[4] = {«Мороз и солнце!», «День чудесный!», «Ещё ты дремлешь» , «Друг прелестный!»}
Здесь poet это массив, который состоит из четырёх указателей на строки символов. Все символьные строки являются массивами символов, это объясняет наличие четырёх указателей на массивы. При этом poet[0] указывает на начало первой строки:
*poet[0] является 'М'.
Выполнять инициализацию требуется по правилам, которые установлены для массивов. Если текстовая информация заключена в кавычки, то это равнозначно инициализации всех строк в массиве. Смежные символьные наборы должны разделяться запятыми. Необходимо заметить, что имеется возможность явного задания размеров символьных строк как указано ниже:
char poet [4] [23];