Содержание | <<< | >>>

Строки

Одномерный массив наиболее часто применяется в виде строки символов. Строка — это одномерный массив символов, заканчивающийся нулевым символом. В языке С признаком окончания строки (нулевым символом) служит символ '\0'. Таким образом, строка содержит символы, составляющие строку, а также нулевой символ. Это единственный вид строки, определенный в С.

На заметкуВ C++ дополнительно определен специальный класс строк, называющийся String[1], который позволяет обрабатывать строки объектно-ориентированными методами. Стандарт С не поддерживает String.

Объявляя массив символов, предназначенный для хранения строки, необходимо предусмотреть место для нуля, т.е. указать его размер в объявлении на один символ больше, чем наибольшее предполагаемое количество символов. Например, объявление массива str, предназначенного для хранения строки из 10 символов, должно выглядеть так:

char str[11];

Последний, 11-й байт предназначен для нулевого символа.

Записанная в тексте программы строка символов, заключенных в двойные кавычки, является строковой константой, например,

"некоторая строка"

В конец строковой константы компилятор автоматически добавляет нулевой символ.

Для обработки строк в С определено много различных библиотечных функций. Чаще всего используются следующие функции:

Имя функцииВыполняемое действие
strcpy(s1,s2)Копирование s2 в s1
strcat(s1,s2)Конкатенация (присоединение) s2 в конец s1
strlen(s1)Возвращает длину строки s1
strcmp(s1,s2)Возвращает 0, если s1 и s2 совпадают, отрицательное значение, если s1<s2 и положительное значение, если s1>s2
strchr(s1,ch)Возвращает указатель на первое вхождение символа ch в строку s1
strstr(s1,s2)Возвращает указатель на первое вхождение строки s2 в строку s1

Эти функции объявлены в заголовочном файле <string.h>. Применение библиотечных функций обработки строк иллюстрируется следующим примером:

#include <stdio.h>
#include <string.h>

int main(void)
{
  char s1[80], s2[80];

  gets(s1);
  gets(s2);

  printf("Длина: %d %d\n", strlen(s1), strlen(s2));

  if(!strcmp(s1, s2)) printf("Строки равны\n");

  strcat(s1, s2);
  printf("%s\n", s1);

  strcpy(s1, "Проверка.\n");
  printf(s1);
  if(strchr("Алло", 'e')) printf(" л есть в Алло\n");
  if(strstr("Привет", "ив")) printf(" найдено ив ");

  return 0;
}

Если эту программу выполнить и ввести в s1 и в s2 одну и ту же строку "Алло!", то на экран будет выведено следующее:

Длина: 5 5
Строки равны
Алло!Алло!
Проверка,
л есть в Алло
найдено ив

Следует помнить, что strcmp() принимает значение ЛОЖЬ, если строки совпадают (хоть это и несколько нелогично). Поэтому в тесте на совпадение нужно использовать логический оператор отрицания ! как в предыдущем примере.

----------

[1]CString в среде Visual C++.


Содержание | <<< | >>>