logo search
Подбельский Фомин_Программирование на языке СИ_

10.3.2. Рекомендации по обработке строк

Кратко напомним некоторые особенности обработки строк, хотя все средства языка, необходимые для выполнения заданий со строками, уже были рассмотрены в первых главах пособия.

  1. Определение символьного массива фиксированного размера:

Нельзя размер массива задавать с помощью переменной, т.е. будет ошибкой определение (если N – непрепроцессорный идентификатор):

2. Определение динамического массива:

3. Обращение к элементу массива:

выражения Аrrау[0] и * Array - эквивалентны. Также эквиваленты выражения:

Для динамического массива, адресованного указателем р, эквивалентны выражения:

4. Переход к соседнему (i +1)-му элементу динамического массива:

следующие выражения эквивалентны:

Неверно: Array++[i] - имя массива есть константа, по определению ее нельзя изменять.

5. Варианты перебора элементов массива.

Опасный вариант (можно забыть начало массива):

6. Строки в языке Си "размещаются" в символьных массивах. Признаком окончания строки служит '\0'.

Если определен массив

то в массиве string[ ] длиной 25 байт будет размещена строка длиной в 11 байт и string[0] = = '\0'.

Строки могут быть заданы в программе и так:

7. Для ввода строк (набираемых на клавиатуре) удобно использовать функцию char* gets(char* s), которая размещает введенную последовательность символов в область памяти, адресуемую указателем s. При этом признак конца ввода '\n', добавляемый во входной поток при нажатии клавиши <Enter>, функция gets( ) заменяет признаком конца строки '\0'.

Использование для ввода строк функции scanf("%s"...) не позволяет вводить последовательности символов, в которых содержатся пробелы или обобщенные пробельные символы. Ввод по спецификации %s выполняется до ближайшего пробела.

8. Вычислить длину (len) строки, находящуюся в массиве string или адресуемую указателем char * string; можно так:

Еще более удобно применять функции для работы со строками из стандартной библиотеки. Они описаны в заголовочном файле string.h (см. Приложение 3). Например, для определения длины строки используйте функцию с прототипом unsigned strlen(char *str). (Возвращает длину строки без учета завершающего строку символа '\0'.)

9. Копировать строку из массива string или из строки, адресуемой указателем char * string, в новый массив, адресуемый указателем char * s, можно таким образом:

здесь len - длина исходной строки.

Вариант, смещающий указатель с начала области памяти:

10. Функции с параметрами-строками:

1) применение указателей

2) применение массива