
- •Лекция 13
- •Основные понятия
- •Операции со строками
- •Инициализация строки
- •Возможные ошибки при работе со строками
- •Ввод-вывод строк
- •Преобразование значения базового типа в с-строку
- •Ввод ограниченного числа символов строки
- •Функция вывода строки
- •Особенности посимвольного вывода строки
- •Копирование строк
- •Оптимизация текста программы на примере функции копирования
- •Функции для работы с с-строками
- •Определение длины строки
- •Копирование строк
- •Объединение строк
- •Сравнение строк
- •Поиск символа в строке
- •Проверка принадлежности символа некоторому множеству
- •Поиск строки в строке
- •Преобразование и заполнение строк
- •Преобразование строки в число
- •Преобразование числа в строку
- •Преобразование строчных символов строки в прописные и наоборот
- •Реверс строки
- •Заполнение строки символом
- •Пример применения функций преобразования
- •Выделение лексем
- •Динамические строки
- •Копирование строки в динамическую строку
- •Передача строки в функцию в качестве параметра
- •Пример_1: в main()– строка-массив; в функции – строка-указатель
- •Пример_2: в main() – строка-указатель; в функции – строка-указатель
- •Передача в функцию массива строк
- •Примеры работы со строками Определение длины строки с помощью функции пользователя
- •Реверс строки (перегрузка функций)
- •Удаление начальных пробелов из строки
- •Проверка, является ли строка целым числом
- •Проверка, является ли строка 16-ичным целым числом
- •Проверка, является ли строка дробным числом без знака
- •Перевод двоичного числа в десятичное
- •Перевод шестнадцатеричного числа в десятичное
- •Перевод десятичного числа в двоичное
- •Перевод десятичного числа в с/с от 2-х до 10
- •Перевод десятичного числа в шестнадцатеричное
- •Определение количества слов в фразе
- •Выделение слов в тексте по нажатию произвольной клавиши
- •Сортировка вводимых с клавиатуры строк *
- •Сортировка строк в зависимости от признака, передаваемого функции main() через аргумент argv *
- •Инвертирование строки с помощью рекурсивной функции
Объединение строк
Функция char* strcat (char* strDest, const char* source)
добавляет копию строки source, включая 0-символ, в конец строки strDest. Начальный символ строки source записывается поверх 0-символа в конце строки strDest. Функция возвращает указатель на начало результирующей строки strDest, которая заканчивается 0-символом и должна иметь размер не менее strlen(strDest) + strlen(source) + 1 байтов.
const int MAX = 80;
char s1[MAX] = "a";
char s2[MAX] = "b";
cout << strcat(s1,s2) << endl; //ab warning C4996: 'strcat' was declared deprecated
cout << s1 << endl; //ab
char* s;
cout << (s= strcat(s1, s2))<< endl;//abb warning C4996
Функция errno_t strcat_s (char *strDest, size_t sizeInBytes_strDest, const char *strSource);
возвращает 0 при успешном завершении и код ошибки – в противном случае.
Функция добавляет strSource к strDest и возвращает в результате строку с нулевым символом. 0-символ strSource заменяет 0-символ strDest. Поведение strcat_s не определено, если исходная и целевая строки накладываются.
код ошибки: EINVAL (22) – Invalid argument или ERANGE ( ) – Result too large.
char buf[16];
strcpy_s(buf, 16, "Start");
strcat_s(buf, 16, " End");
cout << buf << endl; // Start End
const int MAX = 80;
char s1[MAX] = "a";
char s2[MAX] = "b";
strcat_s(s1, MAX, s2);
cout << s1<< endl; //ab
Шаблонная функция (только в С++)
template <size_t size>
errno_t strcat_s(char (&strDes)[size], const char *source );
позволяет вызывать функцию в привычном виде:
const int MAX = 80;
char s1[MAX] = "a";
char s2[MAX] = "b";
strcat_s(s1,s2);
cout << s1 << endl; //ab
Функция char* strncat (char* strDest, const char* source, size_t count)
позволяет добавить не более чем count символов строки source в конец строки strDest и возвращает указатель на strDest. В строке strDest должно быть не менее strlen(strDest) + strlen(source) + 1 байтов.
int count =2;
const int MAX = 80;
char s1[MAX] = "aaa";
char s2[MAX] = "bb";
strncat(s1,s2,count); //warning C4996: 'strncat' was declared deprecated
cout << s1 << endl; //aaabb
char *s_res = strncat(s1,s2,count);
cout << s_res << endl; //aaabbbb
Функция errno_t strncat_s (char *strDest, size_t sizeInBytes_strDest, const char *strSource, size_t count)
возвращает 0 при успешном завершении и код ошибки – в противном случае.
Функция добавляет strSource к strDest и возвращает в результате строку с нулевым символом. Первоначальный 0-символ strSource перезаписывает завершающий 0-символ strDest. Поведение strcat_s не определено, если исходная и целевая строки накладываются.
код ошибки: EINVAL (22) – Invalid argument или ERANGE ( ) – Result too large.
const int MAX = 80;
int count =2;
char s1[MAX] = "a";
char s2[MAX] = "bbb";
strncat_s(s1, MAX, s2, count);
cout << s1<< endl; //abb
Шаблонная функция (только в С++)
template <size_t size>
errno_t strncat_s (char (&strDest)[size], const char *source , size_t count);
позволяет вызывать функцию в привычном виде:
int count=2;
const int MAX = 80;
char s1[MAX] = "aaa";
char s2[MAX] = "bbb";
strncat_s(s1,s2, count);
cout << s1 << endl; //aaabb