Это стандартные функции, которые находятся в библиотеке языка С. Для их подключения необходимо в начале программы записать директиву препроцессора:
#include <string.h>
Рассмотрим основные, наиболее часто используемые строковые функции:
1. strlen(имя_строки) – определяет длину строки без учета символа ‘\0’.
char st[21]=”Program interruption\0”;
int l;
l=strlen(st); à l = =20
2. strcpy(str1,str2) – копирует строку str2 в строку str1, т. е. str2 àstr1.
Длина строки 1 должны быть не меньше длины строки 2.
char a[15], b[12]=”profiles”;
strcpy(a,b); à a==b
3. strcat(str1,str2); - дополняет строку str1 строкой str2, т. е. str1= str1+ str2
char c[25]=”abcdef”, d[10]=”ghijklmn”
strcat(c,d); à c==”abcdefghijklmn”
4. strcmp(str1,str2) – сравнение строк. Эта функция выполняет посимвольное вычитание str1-str2 и возвращает разность кодов ASCII первых двух несовпадающих символов:
strcmp(“AA”,”AA”) = = 0
strcmp(“AB”,”AA”) = = 1
strcmp(“AA”,”AB”) = = -1
Эта функция часто используется для сортировки строк по алфавиту.
Структуры и объединения в языке С
Описание структур
Структура – это средство для объединения нескольких разнотипных величин в одно целое. Например, данные о сотруднике фирмы:
- фамилия – char[];
- имя – char[];
- отдел – int;
- должность – char[]
- зарплата – float
Способы описания структур:
1-й способ. Использование шаблона структуры:
/* Описание шаблона структуры */
struct <имя_шаблона>
{
тип1 имя_поля1;
...
типN имя_поляN;
};
/* Объявление переменных, массивов через шаблон структуры */
struct <имя_шаблона> перем1,..., перемN, массив[K];
где <имя_шаблона> - идентификатор для обозначения шаблона
типI имя_поляI – описание поля, входящего в структуру
Пример. Описать в виде структуры информацию о товарах, хранящихся на складе:
struct Рrod
{
char name[30];
int code;
float price;
int num;
};
struct Рrod pr1, pr2, mpr[20];
2-й способ. Создание нового типа данных в виде структуры.
/* Создание нового типа */
typedef stuct
{
тип1 имя_поля1;
...
типN имя_поляN;
} имя_типа;
/* Объявление переменных, массивов с новым типом в виде структуры */
имя_типа перем1,..., перемN, массив[k];
где typedef – это ключевое слово языка С, которое используется для создания новых (нестандартных) типов данных в программе
имя_типа – это обозначение нового типа данных в программе, имеющего вид структуры. Рекомендуется задавать имя типа с буквы Т... (от английского слова Type – тип).
Пример:
typedef struct
{
char name[30];
int code;
float price;
int num;
} TProd;
...
TProd pr1, pr2, mpr[20];
3-й способ. Одновременное описание структуры и объявление переменных, массивов
struct
{
тип1 имя_поля1;
...
типN имя_поляN;
} перем1,...,перемN,массив[k];
Пример:
struct
{
char name[30];
int code;
float price;
int num;
} pr1, pr2, mpr[20];
Области применения способов 1-3.
1 и 2 способы используются, когда:
а) структура является аргументом функции:
void fst(TProd a,...);
б) в разных функциях программы эта структура используется для описания переменных:
void f1(...)
{
TProd f;
...
}
void f2(...)
{
TProd g;
...
}
3-й способ применяется, когда структура используется только внутри одной функции main() или другой функции.
Инициализация структур
Одновременно с описанием переменных в виде структур, можно задавать полям (элементам) структур начальные значения:
TProd zp={“Компьютер P-IV 3000 MHz”, 2117, 3150.0, 5};
TProd mzp[5]={ {“Холодильник Nord 2910”,1521, 2130.0, 12},
{"Телевизор LG 21FX4RG”, 3462, 1175.0, 10},
.......
};
Работа с элементами структур
Для выделения из структуры отдельного элемента используется форма записи:
перем. имя_поля
где перем – это имя переменной, имеющей вид структуры (способы 1-3)
. - операция выделения из структуры (символ ‘точка’)
имя_поля – это элемент структуры
pr1.code
pr2.price
mpr[6].num
С элементами структур можно выполнять различные операции (ввод, вывод, присваивание, сравнение):
pr1.price=850.0;
scanf(“%d”, &pr1.num);
if(pr1.code = = pr2.code)...;
puts(pr2.name);
Структуры и указатели
Для структур, описанных 1 или 2 способом можно создавать указатели на структуры:
TProd b,*ptr_b;
ptr_b=&b; /* присвоим указателю адрес структуры */
Для выделения элементов структуры через указатель используется форма записи
указатель->имя_поля (‘->’ записывается как ‘минус’‘больше’)
ptr_b->name
ptr_b->price
Можно использовать точку (‘.’):
(*ptr_b).price
Скобки нужны, так как операция. старше операции *.
void fs(TProd *ptx,...)
{
ptx->code=1311;
...
}
Вызов функции:
fs(&b,...);
Указатели на структуры часто используются как аргументы функции, для передачи в функцию только адреса структуры, а не всей структуры.