В Си имеется обширная библиотека функций для работы со строками, которая вызывается директивой препроцессора:
#include <string.h>
Рассмотрим функции, входящие в эту библиотеку.
1. Определение текущей длины строки: int strlen(строка) – возвращает целое число без знака:
char *str;
str = ”jasyk C”;
unsigned int k;
k = strlen(str);
Переменная k примет значение 7.
2. Первое вхождение одного из символов строки – второго аргумента
в строку – первый аргумент char *strpbrk(строка_1, строка_2) возвращает указатель на строку:
char str_1[10]=”jasyk C”;
char str_2[10]=”ky”;
char *str;
str = strpbrk(str_1, str_2); // str – обязательноуказатель!
printf(“\n%s”, str);
На экране появится сообщение:
Yk C
3. Первое вхождение символа – второго аргумента в строку – первый аргумент char *strchr(строка, символ) возвращает указатель на строку:
char str_1[50]="programmisty-molodcy";
char c =’m’;
char *str;
str = strchr(str_1, c);
printf(“\n%s”, str);
На экране появится сообщение:
Mmisty-molodcy
Если символ не найден, то функция возвращает значение NULL.
4. Последнее вхождение символа – второго аргумента в строку – первый аргумент char *strrchr(строка, символ) возвращает указатель на строку:
char str_1[50]="programmisty-molodcy, ljubjat nas krasavicy";
char c ='s';
char *str;
str = strrchr(str_1, c);
printf(“\n%s”, str);
На экране появится сообщение:
Savicy
Если символ не найден, то функция возвращает значение NULL.
5. Первое вхождение заданной последовательности символов строки – второго аргумента в строку – первый аргумент:
char *strstr(строка_1, строка_2) возвращает указатель на строку:
char str_1[50]="programmisty-molodcy, ljubjat nas krasavicy";
char str_2[10]=”ljub”;
char *str;
str = strstr(str_1, str_2);
printf(“\n%s”, str);
На экране появится сообщение:
Ljubjat nas krasavicy
Если последовательность не найдена, то функция возвращает значение NULL.
6. Соединение строки – первого аргумента и строки – второго аргумента char *strcat(строка_1, строка_2) возвращает указатель на строку:
char str_1[50]="programmisty-molodcy,";
char str_2[50]=” ljubjat nas krasavicy";
char *str;
str = strcat(str_1, str_2);
printf(“\n%s”, str);
На экране появится сообщение:
Programmisty-molodcy, ljubjat nas krasavicy
7. Сравнение двух строк: строки – первого аргумента и строки – второго аргумента
int strcmp(строка_1, строка_2) – возвращает
-1, если строка_1 < строка_2,
0, если строка_1 = строка_2,
1, если строка_1 > строка_2
Сравнение производится посимвольно слева направо до первых несовпадающих символов строк.
char str_1[20]=”programmist”;
char str_2[20]=”programmirovanie”;
int k;
k = strcmp(str_1, str_2);
Переменная k примет значение 1, так как первая строка больше (не длиннее!) второй.
8. Переворот строки:
char *strrev(строка) – возвращает указатель на строку:
char str_1[10]=”programma”;
char *str;
str = strrev(str_1);
printf(“\n%s”, str);
На экране появится сообщение:
Ammargorp
9. Копирование одной строки в другую:
char *strncpy(строка_1, строка_2, k) – заменяет k первых символов строки_1 на k первых символов строки_2 и возвращает указатель на строку:
char str_1[50]="pervokursnik";
char str_2[50]="vtoroj kurs";
char *str;
int k=5;
str = strncpy(str_1, str_2, k);
printf(“\n%s”, str);
На экране появится сообщение:
Vtorokursnik
Эта функция не требует операции присваивания слева от себя. При этом выходным параметром является первый аргумент функции:
char str_1[50]="pervokursnik";
char str_2[50]="vtoroj kurs";
int k=5;
strncpy(str_1, str_2, k);
printf(“\n%s”, str_1);
На экране появится сообщение:
Vtorokursnik
10. Преобразование строки в вещественное число (float или double):
float atof(строка) – возвращает вещественное число:
float x;
str="3.1416";
x=atof(str);
printf("\n str = %s", str);
printf("\n x = %6.4f", x);
На экране появится сообщение:
str = 3.1416
x = 3.1416
Если в преобразуемой строке встречается некорректный символ, то преобразование идет до него, и сообщение об ошибке не выдается:
float x;
str="3.14a6";
x=atof(str);
printf("\n str = %s", str);
printf("\n x = %6.4f", x);
На экране появится сообщение:
str = 3.14a6
x = 3.1400
11. Преобразование строки в целое число:
int atoi(строка) – возвращает целое число:
int i;
str="12345";
i=atoi(str);
printf("\n str = %s", str);
printf("\n i = %d", i);
На экране появится сообщение:
str = 12345
i = 12345
Если в преобразуемой строке встречается некорректный символ, то преобразование идет до него, и сообщение об ошибке не выдается:
int i;
str="12a45";
i=atoi(str);
printf("\n str = %s", str);
printf("\n i = %d", i);
На экране появится сообщение:
str = 12a45
i = 12
12. Преобразование строки в длинное целое число:
int atol(строка) – возвращает длинное целое число:
long k;
str="1234567890";
k=atol(str);
printf("\n str = %s", str);
printf("\n k = %d", k);
На экране появится сообщение:
str = 1234567890
k = 1234567890
Если в преобразуемой строке встречается некорректный символ, то преобразование идет до него, и сообщение об ошибке не выдается:
long k;
str="12a4567890";
k=atol(str);
printf("\n str = %s", str);
printf("\n k = %d", k);
На экране появится сообщение:
str = 12a4567890
k = 12
13. Преобразование целого числа в строку. При преобразовании задается основание системы счисления от 2 до 32:
char itoa(число, строка, основание) – возвращает указатель на строку:
int i=12345;
char *str;
itoa(i, str, 10); // оператор присваивания не нужен!
printf("\n i = %d", i);
printf("\n str = %s", str);
На экране появится сообщение:
i = 12345
str = 12345
Преобразуем число в шестнадцатеричную систему счисления:
int i=23456;
char *str;
itoa(i, str, 16);
printf("\n i = %x", i);
printf("\n str = %s", str);
На экране появится сообщение:
i = 5BA0
str = 5BA0
14. Преобразование длинного целого числа в строку. При преобразовании задается основание системы счисления от 2 до 32:
char ltoa(число, строка, основание) – возвращает указатель на строку:
long i=1234567890;
char *str;
ltoa(i, str, 10);
printf("\n i = %d", i);
printf("\n str = %s", str);
На экране появится сообщение:
i = 1234567890
str = 1234567890
Преобразуем это же число в шестнадцатеричную систему счисления:
long i=1234567890;
char *str;
ltoa(i, str, 16);
printf("\n i = %x", i);
printf("\n str = %s", str);
На экране появится сообщение:
i = DFB38D2
str = DFB38D2
Учебное издание