Содержание
Определение строк
Строки в C фактически являются массивами строк. Хотя указатели (pointer) мы будем рассматривать позже, мы используем тут указатель на массив символов, что бы определить простую строку, например:
char * name = "John Smith";
Таким образом можно создать строку, которая будет доступна только для чтения. Если мы хотим создать строку, с которой можно выполнять различные манипуляции – необходимо определить массив символов, например:
char name[] = "John Smith";
Пустые квадратные скобки указывают компилятору автоматически подсчитать размер создаваемого массива символов. То же самое можно сделать, задав размер массива явно:
char name[] = "John Smith"; /* аналогично */ char name[11] = "John Smith";
Причина, по которой мы указываем размер в 11 символов, а не 10, это то, что 1 элемент используется для обозначения окончания строки.
Форматирование строки с помощью printf
Мы можем использовать функцию printf()
для форматирования различных строк, например:
char * name = "John Smith"; int age = 27; /* выведет на экран'John Smith is 27 years old.' */ printf("%s is %d years old.n", name, age);
Сравнение строк
Фукнция 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"); }
В примере ниже мы используем новую функцию sprintf()
, которая сохраняет отформатированные строки в новую переменную:
#include <stdio.h> int main() { char * first_name = "John"; char last_name[] = "Doe"; char name[100]; /* testing code */ if (strncmp(first_name, "John") != 0) return 1; if (strncmp(last_name, "Doe") != 0) return 1; last_name[0] = 'B'; sprintf(name, "%s %s", first_name, last_name); if (strncmp(name, "John Boe", 100) == 0) { printf("Done!n"); } return 0; }