Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема7.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
127.49 Кб
Скачать

1.3. Сравнение строк

Для лексикографического сравнения строк используются функции strcmp и stricmp. Первая сравнивает строки с учетом регистра, вторая – без. Однако, все это относится только к латинице. Кириллические строки сравниваются только с учетом регистра. Прототипы этих функций таковы:

int stricmp(char *string1, char *string2);

int strcmp(char *string1, char *string2);

Обе функции возвращают число меньшее 0, если первая строка меньше второй, большее нуля если первая строка больше второй и 0, если строки лексикографически равны.

Следующие две функции сравнивают с учетом регистра и без не более size символов строки string1 и строки string2.

int strncmp(char *string1, char *string2, int size);

int strnicmp(char *string1, char *string2, int size);

1.4. Длина строки

Для вычисления длины строки используется функция

size_t strlen(const char *string);

Функция возвращает длину строки, не включая нуль-терминатор. Как всегда, следите за тем, чтобы в выделенной под string памяти все же нашелся такой символ. В противном случае функция выйдет за пределы выделенной памяти и все будет плохо. Напомню, что для определения длины строки функции придется последовательно обратиться ко всем ее символам до нуль-терминатора, а значит, потенциально эта операция довольно дорогая. Поэтому, не следует использовать эту функцию в циклах, то есть вместо

for (i=0;i<strlen(str);i++) {работа со строкой, не изменяющая ее длину}

больше подойдет примерно такой код :

char len;

len=strlen(str);

for (i=0;i<len;i++) { работа со строкой, не изменяющая ее длину }

1.5. Преобразования строк

Зачастую требуется преобразовать число в строку и наоборот. Есть несколько способов сделать это.

Во-первых, можно использовать функции sprintf и sscanf. Например, так:

char str[50];

int i=15;

int j;

sprintf(str, "%d", i); // Записать в str строковое представление i

sscanf(str, "%d", &j); // Записать в j число, содержащееся в строке str

sprintf(str, "i=%d and j=%d", i, j);

// содержимое str: "i=15 and j=15"

Эти функции очень похожи на printf и scanf, за исключением того, что они работают не с консолью, а со строковым буфером. Для дополнительной информации об этих функциях см. документацию.

Хотя sprintf и sscanf довольно удобны, у них есть несколько недостатков. Во-первых, они не всегда быстро работают, во-вторых, не типобезопасны. Например, если в строке формата вы укажите, что передаете два целых, а вместо этого передадите два double, ошибка обнаружится только при выполнении программы и найти ее причину будет не так-то просто.

В-третьих, доступно целое семейство функций atof, atoi, atol и itoa, ltoa (библиотека stdlib.h). Все они очень похоже между собой. Функции из первой группы преобразуют строку в число (float, int или long) в зависимости от окончания. Функции из второй группы выполняют обратное преобразование.

Прототипы функций из первой группы:

double atof(const char* string);

int atoi(const char* string);

long atol(const char* string);

Вторая группа:

char* itoa(int value, char* string, int radix);

char* ltoa(long value, char* string, int radix);

Функции из второй группы могут создавать строковое представление чисел в любой системе (по любому основанию) от 2 до 36. Основание передается в третьем параметре. Чтобы получить строковое представление числа в десятичной системе, передайте 10. Функции возвращают указатель на строку.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]