Программирование на C и C++

Онлайн справочник программиста на C и C++

Строки

Наиболее типичным использованием одномерного массива являются строки. Хотя С не определяет строкового типа, имеется поддержка строковых операций с помощью функций, имеющихся в любом языке. В С строка определяется как символьный массив произвольной длины, оканчивающийся нулевым символом. Нулевой символ определяется как '\0'. Поэтому необходимо объявлять символьные массивы на один символ больше, чем требуется для хранения самой длинной строки. Например, если необходимо объявить массив s, содержащий десятисимвольную строку, следует написать:

char s [11];

В результате этого выделяется место в конце строки для нулевого символа.

Хотя С не имеет строкового типа данных, имеются строковые константы. Строковые константы -это список символов, заключенных в двойные кавычки. Ниже показаны две строковые константы:

"hello there" "this is a test"

He надо добавлять нулевой символ в конец строковой константы, поскольку компилятор С выполняет это автоматически.

С поддерживает множество функций для работы со строками. Наиболее типичными являются strcpy(), strcat(), strlen() и strcmp() со следующими прототипами:

char *strcpy(char *s1, const char *s2);

char *strcat(char *s1, const char *s2);

size_t strlen(const char *s1);

int strcmp(const char *s1, const char *s2);

Все функции используют заголовочный файл string.h. Функция strcpy() копирует строку, на которую указывает s2, в строку, на которую указывает s1. Функция возвращает s1. Функция strcat() выполняет конкатенацию строки, на которую указывает s2, и строки, на которую указывает s1. Она также возвращает s1. Функция strlen() возвращает длину строки, на которую указывает s1. (Тип данных size_t определяется, используя typedef как беззнаковое целое.) Функция strcmp() сравнивает s1 и s2. Она возвращает 0, если две строки эквивалентны, число большее 0 - если строка, на которую указывает s1, больше, чем строка, на которую указывает s2, и число меньшее 0 - если строка, на которую указывает s1, меньше, чем строка, на которую указывает s2. Все сравнения выполняются лексикографически (согласно порядку словаря). Следующая программа демонстрирует использование данных строковых функций:

#include <string.h>
#include <stdio.h>
int main(void)
{
char s1[80], s2[80];
gets (s1); gets (s2);
printf("lengths: %d %d\n", strlen(s1), strlen(s2));
if(!strcmp(s1, s2)) printf("The strings are equal\n");
strcat(s1, s2);
printf("%s\n", s1);
return 0;
}

Если при запуске программы ввести строки «hello» и «hello», в результате получится:

length: 5 5
The strings are equal
hellohello

Важно понять, что strcmp() возвращает ложь, если строки не равны. Поэтому можно использовать ! для инверсии состояния, как показано в данном примере.