Одномерный массив наиболее часто применяется в виде строки символов. Строка — это одномерный массив символов, заканчивающийся нулевым символом. В языке С признаком окончания строки (нулевым символом) служит символ '\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++.