Работа со строками

Определение: строка в понимании языка С = массив переменных типа char, терминированный символом с нулевым кодом.

Следствие1. Для работы со строкой в языке С всегда надо знать ограничение на ее длину (т.к. длина массива задается до его использования).

Например, если надо работать со строками длины менее 256 символов, то надо создать

char str[256];

Или если надо работать со строками длины менее n символов, то надо создать

char *s=NULL; s=(char*)malloc(n);

free(s);s=NULL;

 

Следствие 2. Если не гарантировать, что в массиве есть нулевой байт, то может получаться строка, с которой нельзя работать как со строкой в понимании языка С.  

Например, следующее определение еще не задает строку в понимании языка С:

char str[256];

а вот такое задает:

char str[256]=””;

Следствие 3. Строки в  языке С не являются переменными, т.к. их нельзя напрямую присваивать друг другу.

А вот строки-константы в языке С есть: ”123”. Здесь задана строковая константа из четырех char (последний нулевой символ задается неявно).  

 

Функции для работы с текстом, которые надо обязательно знать.

#include <string.h>

Все имена функций из этого include-файла имеют следующий вид (далее * = один символ):

str***

здесь последние три символа задают, собственно, описание действия функции (например, cpy = копирование, cmp = сравнение, len = получение длины строки и т.д.). i или case значит (что конкретно используется зависит от компилятора/библиотеки), что будет происходить сравнение независимо от регистра (ignore case). n значит, что последним аргументом функции будет целая переменная, задающая ограничение на длину строки.

strlen(str) – получение длины строки (без нулевого символа)

Копирование:

char *strcpy(to,from); - копирование из строки from в строку to

char *strncpy(to,from,n); - копирование не более n символов из строки from в строку to (если символов больше, то нулевой байт не дописывается)

char *strcat(to,from); - подклеивание строки from в конец строки to. Эквивалентно:

                strcpy(to+strlen(to),from);

char *strncat(to,from,n); - подклеивание не более n символов  строки from в конец строки to  (если символов больше, то нулевой байт не дописывается)

char *strdup(from); - создание копии строки from (с отведением новой памяти) и возврат указателя на новую строку. Эквивалентно:

                strcpy((char*)malloc(strlen(from)+1),from);

Сравнение:

int strcmp(str1,str2); - если строки совпадают, то возвращается 0; если первая больше, то возвращается положительное числе; если меньше – отрицательное. Сравнение лексикографическое.

Поиск:

char *strstr(str,word); - ищет первое вхождение слова в строку; если найдет – возвращает указатель на начало слова, иначе возвращает NULL.

char *strchr(str,c); - ищет первое вхождение символа в строку; если найдет – возвращает указатель на этот символ, иначе возвращает NULL.

Функции для определения вида символа, которые надо обязательно знать.

#include <ctype.h>

int isalpha(c) – является ли символ c буквой английского алфавита

int isdigit(c) – является ли символ цифрой

int isalnum(c) – является ли символ c буквой английского алфавита или цифрой

int isspace(c) – является ли символ c пробельным символом (пробел, табуляция, символ перехода на следующую строчку)

 

Примеры.

1.

 

2.