Поиск в строке
Для поиска существует довольно большая группа функций, из них рассмотрим strchr (вхождение символа в строку) и strstr (вхождение подстроки в строку)
char * strchr (char * str, int character );
char * strstr (char * str1, const char * str2 );
Обе возвращают указатель на первое вхождение искомого в строку, или NULL, если искомое не было найдено.
Упражнение 5. Поиск в строке Проверить, содержит ли строка хотя бы один заданный символ2. Проверить, содержит ли строка заданную подстроку3. |
Преобразования строк
Зачастую требуется преобразовать число в строку и наоборот. Есть несколько способов сделать это.
Во-первых, такие преобразования совсем несложно делать самостоятельно. Оставляю это в качестве домашнего задания.
Во-вторых, доступно целое семейство функций atof, atoi, atol и itoa, ltoa. Все они очень похоже между собой. Функции из первой группы преобразуют строку в число (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. Функции возвращают указатель на строку.
ПРИМЕЧАНИЕ При использовании этих функций не забывайте выделять память, достаточную для предоставления строкового предоставления числа. Например, максимальная длина десятичного строкового представления четырехбайтного беззнакового целого числа - 11 байт, включая нуль-терминатор ("4294967295"). |
Пример:
char str1[5]; char str2[5]; char str3[5]; itoa(12, str1, 10); //str1=”12” itoa(12, str1, 16); //str1=”C” itoa(12, str1, 2); //str1=”1100”
|
Упражнение 6. Дана строка, содержащая арифметическое выражение вида <число> + <число> =. Требуется вычислить значение суммы. |
Заключение
На этом первая часть, посвященная С-строкам заканчивается. В качестве домашнего задания рекомендую изучить примеры приложения и выполнить следующие упражнения.
Упражнение 7. Дана строка, содержащая латинские буквы и десятичные цифры. Получить две строки, одну из букв, другую из цифр данной строки, сохранив относительный порядок символов. Например, из строки “qwer4672ty01” получим “qwerty” и “467201”.
Упражнение 8. На входе две строки: текст поздравления, в котором на месте, где должно стоять имя, находится последовательность символов ##...#, и строка с именем. Требуется создать новую строку, вставив имя вместо последовательности ##...#. Например, из строк “Dear ###! Congratulations!” и “Mary” следует получить “Dear Mary! Congratulations!”
Упражнение 9. Рассмотрите подходы к реализации таких простых действий, как удаление части строки слева и справа. Принципиально это достаточно просто. Для удаления части строки справа достаточно в нужном месте строки поставить символ ‘\0’. Например, в строке “ABCD\0EFGHK” осталась только часть “ABCD”. Чтобы удалить часть строки слева надо перенести указатель на новое начало строки:
char* a = “ABCDEFGHK”;
a += 4;
Теперь в a содержится только “EFGHK”.
