Определение: строка в понимании языка С = массив переменных типа 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.