strcat в C/C++: соединение строк
Привет! В этой статье я тебе расскажу что такое strcat
и как ее использовать. Начнем мы с примера использования этой функции. Потом мы попробуем реализовать эту функцию сами. Закончим все это мы упражнениями, которые помогут тебе закрепить материал.
Конкатенация строк при помощи strcat в C/C++
Давай сразу посмотрим на то, как эта функция выглядит:
char * strcat ( char * destination, const char * source );
- Первым аргументом эта функция принимает строку, к которой мы будем добавлять другую строку. Она должна быть достаточно большой, чтобы вместить в себя результат.
- Вторым аргументом нужно передать строку, которую ты хочешь добавить к предыдущей.
- Функция возвращает нам обратно первый аргумент
destination
.
Обе строки должны заканчиваться нуль-терминатором.
Ах да, забыл сказать. Для того, чтобы использовать эту функцию нужно подключить <cstring>
в C++ или <string.h>
в C.
Давай теперь посмотрим на пример использования этой функции:
#include <cstring>
#include <iostream>
using namespace std;
int main() {
// строка должна быть достаточно большой, чтобы вместить в себя
// обе строки после соединения
char destination[100] = "C";
// тут нам без разницы на размер строки
char plusplus[] = "++";
char* result = strcat(destination, plusplus);
cout << "plusplus:" << plusplus << endl;
cout << "result: " << result << endl;
cout << "destination: " << destination << endl;
cout << "result == destination: " << (result == destination) << endl;
return 0;
}
Ну и давай запустим это чудо человеческой мысли:
plusplus:++
result: C++
destination: C++
result == destination: 1
Ну что, тут нет ничего неожиданного. destination
равен result
‘у. plusplus
никак не поменялся. Ну и мы тут проверил, что result
и destination
указывают на одну и туже строку. Прекрасно.
Что будет выведено на экран?
#include <cstring>
#include <iostream>
using namespace std;
int main() {
char first_str[20] = "Open";
char second_str[] = "AI";
strcat(first_str, second_str);
cout << first_str << endl;
return 0;
}
Давай теперь выделимся из толпы, написав свою версию этой функции.
Пишем свою версию strcat с блэкджеком и массивами
Чтобы показать коллегам свой профессионализм, давай напишем strcat
по своему:
#include <cstring>
#include <iostream>
using namespace std;
char* my_strcat(char* destination, const char* source) {
int len = strlen(destination);
for (int i = 0; source[i] != '\0'; i++) {
destination[len + i] = source[i];
}
destination[len + strlen(source)] = '\0';
return destination;
}
int main() {
char result[100] = "ABC";
cout << "result = " << my_strcat(result, "DEF") << endl;
return 0;
}
Ну и конечно давай запустим эту подделку:
result = ABCDEF
Фух, отработало без ошибок. А то пришлось бы краснеть перед всеми.
Ты мог заметить, что я воспользовался функцией strlen
. Это твой шанс меня обставить и реализовать my_strcat
вообще без помощи встроенных функций. Жду твою реализацию в комментариях.
Упражнения
-
Основы использования
strcat
:- Напиши программу на C++, которая использует функцию
strcat
для соединения двух строк, введенных пользователем. Проверь, что результирующая строка соответствует ожидаемой конкатенации. - Добавь в программу вывод всех трех строк (исходные две строки и результат их соединения) на экран.
- Напиши программу на C++, которая использует функцию
-
Реализуй свою версию
strcat
:- Используя предоставленный в статье пример, реализуй свою версию функции
strcat
. Назови ееmy_strcat
. - Протестируй свою версию функции, соединяя разные пары строк, и сравни результаты с работой оригинальной функции
strcat
.
- Используя предоставленный в статье пример, реализуй свою версию функции
-
Реализация
my_strcat
безstrlen
:- Попробуй написать реализацию функции
my_strcat
без использования встроенной функцииstrlen
или других встроенных функций. - Проверь свою реализацию на различных парах строк и убедись, что она работает корректно.
- Попробуй написать реализацию функции
Если хотите всегда быть в курсе последних новостей в мире программирования и IT, подписываетесь на мой Telegram-канал, где я делюсь свежими статьями, новостями и полезными советами. Буду рад видеть вас среди подписчиков!