Я хочу скопировать набор символов из массива, от индекса к другому. Например, у меня есть массив char array[64]
и я хочу выбрать символы из let say 5-15 и сохранить их в другом массиве char. Я мог бы сделать это с циклом for, но есть ли какая-то функция, которая делает это? Как подстрока метода С#. Заранее спасибо.
Вы всегда можете использовать memcpy
для достижения этого, и в любом случае это будет более эффективно.
char a[100] = {0};
char b[100] = {1};
memcpy(&a[10], &b[30], 10);
C++: используйте std::copy_n
:
#include <algorithm>
int main() {
char a[100] = {0};
char b[100] = {1};
std::copy_n(&a[10], 10, &b[30]);
}
Вы действительно задали два довольно разных вопроса, и (до сих пор) большинство ответов, которые вы получили, сосредоточились исключительно на одном.
Ответ, на который они ответили, - это копирование символов в массивы.
Однако в конце вашего вопроса вы говорите: "Как подстрока метода С#".
Это действительно указывает в совершенно другом направлении: по крайней мере, в C++ (но не в C) ближайшим эквивалентом С# Substring является std::string
substr
. Например:
std::string a("12345678");
std::string b = a.substr(2,3); // b == 345
std::string
также предоставляет ряд конструкторов, которые позволяют создавать одну строку в качестве подстроки другого, чтобы вы могли добиться такого же эффекта:
std::string b = std::string(a, 2, 3);
Мой немедленный совет: если вы собираетесь писать C++, напишите реальный C++. Особенно с подобием в синтаксисе, легко представить себе C++ как C с несколькими дополнительными колокольчиками и свистами.
На самом деле хорошо написанный C++, как правило, сильно отличается от хорошо написанного C. В хорошем C++, необработанные массивы, исходные указатели и функции типа strncpy
и memcpy
как правило, довольно редки. Одной из основных достоинств C++ является поддержка относительно высокоуровневых абстракций с небольшим или вообще отсутствующим штрафом в эффективности. Я бы посоветовал воспользоваться этим.
Существует несколько подходов. Например, вы можете использовать стандартную функцию C strncpy
. Например
strncpy( dest, source + 5, 11 );
Или вы можете использовать стандартный алгоритм C++ std::copy
. Например
std::copy( source + 5, source + 16, dest );
Или вы можете использовать стандартный алгоритм 'std :: copy_n. Например
std::copy_n( source + 5, 11, dest );
Но если вы будете использовать лямбда-выражения, то набор стандартных алгоритмов, которые могут быть использованы для этой операции, будет увеличен. :)
#include <string.h>
char array[64];
char new_array[12]; /* 12th char for '\0' */
/* put some data into array */
/* copy chars 5-15 (11 chars) from array to new_array */
strncpy(new_array, &array[4], 11);
memcpy
или memmove
будет перемещать весь блок за один выстрел и исключать цикл.
В C вы можете использовать стандартную библиотечную функцию memcpy
.
std::copy
? Кстати, эти два языка не очень продуктивны.strncpy()
и / илиstd::copy()
.