strcpy в C++: копирование строк
В данном уроке мы рассмотрим функцию strcpy, доступную при подключении <cstring>. Данная функция позволяет нам копировать строки в стиле C (массивы символов char[]). Мы разберем несколько примеров использования данной фун кции, а в конце вы найдете упражнения, которые помогут вам закрепить изученный материал на практике.
Копирование строк с помощью strcpy
Прототип функции strcpy имеет следующий вид:
char * strcpy ( char * destination, const char * source );- Первым аргументом функция принимает указатель
destinationна место, куда будет скопирована строка. - Вторым аргументом
sourceмы указываем, откуда нужно копировать. - Функция возвращает указатель на скопированную строку (указатель
destination, который мы передали первым аргументом).
Сама функция будет копировать символы до тех пор, пока не дойдет до специального символа \0, который означает конец строки:
#include <cstring>
#include <iostream>
using namespace std;
int main() {
char source[] = "Использование функции strcpy";
char destination[sizeof(source)];
strcpy(destination, source);
cout << "source = " << source << endl;
cout << "destination = " << destination << endl;
return 0;
}Вывод:
source = Использование функции strcpy
destination = Использование функции strcpyЧто будет выведено на экран?
#include <cstring>
#include <iostream>
using namespace std;
int main() {
char source[] = "strcpy";
char destination[4];
strcpy(destination, source);
cout << "destination = " << destination << endl;
return 0;
}Как самому реализовать strcpy
Теперь давайте попробуем реализовать функцию strcpy сами, чтобы лучше понять, как она работает. Для этого нам нужно пройтись по строке source, копируя символы в destination. Условием завершения копирования будет достижение символа \0:
#include <iostream>
using namespace std;
char* strcpy(char* destination, const char* source) {
char* current = destination;
// проходим по массиву до тех пор, пока не встретим '\0'
while (*source != '\0') {
// копируем символ
*current = *source;
// сдвигаем указатели на одну ячейку вперед
source++;
current++;
}
// последний штрих, указываем конец строки
*current = '\0';
// и нужно не забыть вернуть указатель на скопированную строку
return destination;
}
int main() {
char source[] = "Использование функции strcpy";
char destination[sizeof(source)];
strcpy(destination, source);
cout << "source = " << source << endl;
cout << "destination = " << destination << endl;
return 0;
}Вывод:
source = Использование функции strcpy
destination = Использование функции strcpyВывод программы идентичен, поскольку наша функция strcpy делает тоже самое, что и стандартная strcpy из C++ библиотеки <cstring>.
Упражнения
Конечно, давайте модифицируем первое упражнение:
-
Обратное копирование строки:
Напишите программу на C++, которая копирует строкуsourceв строкуdestination, но в обратном порядке, используя функцию вашу собственную версиюstrcpy. Например, если исходная строка “Привет”, то скопированная строка будет “тевирП”. Ваша программа должна отображать исходную строку и результат после копирования. -
Сравнение строк:
Напишите программу, которая сначала копирует строкуsourceвdestination, а затем проверяет идентичны ли исходная строка и скопированная. Результат проверки (идентичны или нет) выводится на экран. -
Копирование строки с добавлением символов:
Модифицируйте свою версию функцииstrcpy, чтобы перед скопированной строкой вdestinationдобавлялась фраза “Копия: “. Таким образом, если исходная строка была “Привет, мир!”, результатом копирования будет “Копия: Привет, мир!“. Ваша программа должна отображать исходную строку и результат после копирования.
Если хотите всегда быть в курсе последних новостей в мире программирования и IT, подписываетесь на мой Telegram-канал, где я делюсь свежими статьями, новостями и полезными советами. Буду рад видеть вас среди подписчиков!
Обсуждение