Струны


Определение строк

Строки в C на самом деле представляют собой массивы символов. Хотя использование указателей в C - это сложная тема, которая будет полностью объяснена позже, мы будем использовать указатели на массив символов для определения простых строк следующим образом:

char * name = "John Smith";

Этот метод создает строку, которую мы можем использовать только для чтения. Если мы хотим определить строку, которой можно управлять, нам нужно будет определить ее как локальный массив символов:

char name[] = "John Smith";

Эта нотация отличается, потому что она выделяет переменную массива, чтобы мы могли ею манипулировать. Обозначение пустых скобок указывает компилятору автоматически рассчитать размер массива. Фактически это то же самое, что и явное выделение, добавление единицы к длине строки:[]

char name[] = "John Smith";
/* is the same as */
char name[11] = "John Smith";

Причина, по которой нам нужно добавить один, хотя John Smithдлина строки ровно 10 символов, связана с завершением строки: специальным символом (равным 0), который указывает конец строки. Конец строки отмечен, потому что программа не знает длины строки - только компилятор знает ее в соответствии с кодом.

Форматирование строки с помощью printf

Мы можем использовать printfкоманду для форматирования строки вместе с другими строками следующим образом:

char * name = "John Smith";
int age = 27;

/* prints out 'John Smith is 27 years old.' */
printf("%s is %d years old.\n", name, age);

Обратите внимание, что при печати строк мы должны добавить \nсимвол новой строки ( ), чтобы наша следующая printfинструкция печаталась с новой строки.

Длина строки

Функция strlen возвращает длину строки, которую нужно передать в качестве аргумента:

char * name = "Nikhil";
printf("%d\n",strlen(name));

Сравнение строк

Функция strncmpсравнивает две строки, возвращая число 0, если они равны, или другое число, если они разные. Аргументами являются две сравниваемые строки и максимальная длина сравнения. Вызывается также небезопасная версия этой функции strcmp, но использовать ее не рекомендуется. Например:

char * name = "John";

if (strncmp(name, "John", 4) == 0) {
    printf("Hello, John!\n");
} else {
    printf("You are not John. Go away.\n");
}

Конкатенация строк

Функция strncat добавляет первые n символов строки src к строке назначения, где n равно min (n, length (src)); Передаваемые аргументы - это строка назначения, исходная строка и n - максимальное количество добавляемых символов. Например:

char dest[20]="Hello";
char src[20]="World";
strncat(dest,src,3);
printf("%s\n",dest);
strncat(dest,src,20);
printf("%s\n",dest);

Упражнение

Определите строку first_nameсо значением, Johnиспользуя нотацию указателя, и определите строку last_nameсо значением, Doe используя нотацию локального массива.