Здравствуйте, Саша Равный, Вы писали:
СР>Имеется массив символов: СР>Как из него вырезать подстроку с позиции n1 до n2 ? Причем, результат тоже получить в символьном массиве
В зависимости от специфики задачи, можно использовать strncpy, memcpy или std::copy
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, Саша Равный, Вы писали:
СР>Здравствуйте, rg45, Вы писали:
R>>В зависимости от специфики задачи, можно использовать strncpy, memcpy или std::copy
СР>Специфика самая обычная. Есть символьный массив, из которого надо перегнать определенный диапазон в другой массив.
А как должны обрабатываться нулевые символы в середине копируемого диапазона?
--
Справедливость выше закона. А человечность выше справедливости.
Re[3]: вырезать из символьного массива подстроку
От:
Аноним
Дата:
17.02.09 12:39
Оценка:
Здравствуйте, Саша Равный, Вы писали:
СР>Здравствуйте, rg45, Вы писали:
R>>В зависимости от специфики задачи, можно использовать strncpy, memcpy или std::copy
СР>Специфика самая обычная. Есть символьный массив, из которого надо перегнать определенный диапазон в другой массив.
обычный?
а позиции в символах или байтах?
а символ сколько байт занимает? (а в utf-8 размер символа не фиксированный)
а терминированность по 0 учитывать или нет необходимости?
а перегнать в те же позиции или в начало buf2?
правильная формулировка задачи чаще всего уже содержит решение.
Здравствуйте, Аноним, Вы писали:
СР>>Специфика самая обычная. Есть символьный массив, из которого надо перегнать определенный диапазон в другой массив. А>обычный?
"Зачарованный"
А>а позиции в символах или байтах?
Имеется ввиду нумерация с 0 или 1 ? Если сделаете с 1, то тоже подойдет, хотя думается так несколько сложнее
А>а символ сколько байт занимает? (а в utf-8 размер символа не фиксированный)
1 байт, 8 бит.
А>а терминированность по 0 учитывать или нет необходимости?
Терминировать нулем '\0'
А>а перегнать в те же позиции или в начало buf2?
В начало.
А>правильная формулировка задачи чаще всего уже содержит решение.
Здравствуйте, Саша Равный, Вы писали:
СР>Здравствуйте, rg45, Вы писали:
R>>А как должны обрабатываться нулевые символы в середине копируемого диапазона?
СР>копироваться.
Если я правильно понял задачу, то так:
memcpy(buf2, buf + n1, n2 - n1);
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, Саша Равный, Вы писали:
А>>а позиции в символах или байтах? СР>Имеется ввиду нумерация с 0 или 1 ? Если сделаете с 1, то тоже подойдет, хотя думается так несколько сложнее
индексация в разделе C/C++ с 0
в utf-8 строке длиной 5 символов может иметь размер в 8 байт. есть еще уникод, ну там 2,4 байта на символ и т.д., вопрос в этом ракурсе.
А>>а символ сколько байт занимает? (а в utf-8 размер символа не фиксированный) СР>1 байт, 8 бит.
что будет если надо будет перенести на другую платформу, под другую кодировку (локализация и т.п.)?
А>>а терминированность по 0 учитывать или нет необходимости? СР>Терминировать нулем '\0'
кроме этого еще имеется ввиду реакция на сам 0 в исходном массиве, останавливаться или продолжать копировать.
// все необходимые проверки за кадром, аха :)
memcpy(buf2, buf1 + n1, n2 - n1); // как уже написал rg45
buf2[n2 - n1] = 0; // "прикроем фанеркой" :)