Программирование на C шаг за шагом: шаг 4 – строки

 

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

Строки в 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;
}