С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 5.00
Grey5
2 / 2 / 0
Регистрация: 11.03.2010
Сообщений: 178
#1

Скопировать часть строки - C++

31.05.2013, 18:45. Просмотров 2927. Ответов 28
Метки нет (Все метки)

Как мне скопировать часть строки с элемента a по элемент b?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2013, 18:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Скопировать часть строки (C++):

Скопировать часть строки и часть удалить - C++
1. Удалить из строки ее часть с заданной позиции и заданной длины. 2. Скопировать часть строки с определенной позиции и определенной...

Скопировать часть строки - C++
Здравствуйте. Имеется 2 строки AnsiString str1 = "123456"; AnsiString str2; Как скопировать часть строки str1 в строку...

Как скопировать часть строки до определенного символа? - C++
Допустим, пользователь вводит с клавиатуры строку. Необходимо скопировать часть строки до какого-то определенного символа и поместить ее в...

Std::copy как скопировать часть строки массива byte? - C++
Вот из этой строки: BYTE pbHash; Нужно скопировать содержимое с 0й по 15ю ячейку, в эту строку: BYTE bAesKey; Так будет? ...

Скопировать из файла часть символов - C++
Требуется скопировать часть файла(txt) с позиции n до позиции m в поток и посчитать в этой части количество цифровых символов. не могу...

Скопировать часть одного вектора в другой, в обратном порядке - C++
как скопировать часть одного вектора в другой, при этом отсчет с конца V1 = 1,2,3,4,5 v2 должен ровняться 5,4,3

28
Miwa123
37 / 37 / 1
Регистрация: 16.04.2013
Сообщений: 317
Записей в блоге: 1
31.05.2013, 18:50 #2
C++
1
strncpy()
0
Grey5
2 / 2 / 0
Регистрация: 11.03.2010
Сообщений: 178
31.05.2013, 19:04  [ТС] #3
Она же копирует с начала строки
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
31.05.2013, 19:05 #4
Цитата Сообщение от Grey5 Посмотреть сообщение
Она же копирует с начала строки
Она копирует откуда указывает указатель.
0
Grey5
2 / 2 / 0
Регистрация: 11.03.2010
Сообщений: 178
31.05.2013, 21:34  [ТС] #5
И как мне сделать указатель на нужный символ?
0
Гром
210 / 129 / 11
Регистрация: 20.03.2009
Сообщений: 1,103
Записей в блоге: 16
Завершенные тесты: 1
31.05.2013, 22:09 #6
Увеличить значение указателя на величину, равную номеру символа, с которого нужно начинать копирование
C++
1
2
3
4
void copy(const char* dest, char* src, std::size_t start, std::size_t len)
 {
 strncpy(dest, src + start, len);
 }
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
31.05.2013, 22:11 #7
Гром, с const напутали.
0
NeonLost
Пес войны
75 / 86 / 3
Регистрация: 23.02.2012
Сообщений: 653
31.05.2013, 22:12 #8
строка у тебя это char *str;
или string str;?
указатель можно передвинуть прибавив к нему число элементов на которое нужно сдвинуть
0
castaway
Эксперт С++
4916 / 3024 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
31.05.2013, 22:13 #9
Скорее он напутал с size_t, т.к. тип не находится в пространстве имен std.
А с const вроде все в порядке...
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
31.05.2013, 22:22 #10
lazybiz, std::size_t есть. А вот скопировать в константную строку не получится.
0
Гром
210 / 129 / 11
Регистрация: 20.03.2009
Сообщений: 1,103
Записей в блоге: 16
Завершенные тесты: 1
31.05.2013, 22:24 #11
Tulosba, точно. Я сначала по памяти написал const char* src, char* dest, потом уточнил порядок и тупо поменял местами src и dest, напрочь забыв про const.
lazybiz, не совсем так. size_t в Си находился в глобальной области видимости (ввиду отсутствия там пространств имен), в плюсах его, как и, наверное, всю стандартную библиотеку, поместили в пространство имен std. Но для совместимости с Си-кодом оставили также и глобально. Так что size_t находится как в глобальной области видимости, так и в std.
0
castaway
Эксперт С++
4916 / 3024 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
31.05.2013, 22:31 #12
В С++ size_t поместили в std видимо только для "удобства". Нет необходимости указывать пространство имён.

Добавлено через 29 секунд
С указателем да, там не усмотрел..

Добавлено через 2 минуты
Цитата Сообщение от Гром Посмотреть сообщение
size_t в Си находился в глобальной области видимости (ввиду отсутствия там пространств имен)
Т.е. когда еще не было С++, заранее задумывали что будут пространства имён и планировали поместить в него тип size_t !?)))
0
Гром
210 / 129 / 11
Регистрация: 20.03.2009
Сообщений: 1,103
Записей в блоге: 16
Завершенные тесты: 1
31.05.2013, 23:01 #13
Цитата Сообщение от lazybiz Посмотреть сообщение
В С++ size_t поместили в std видимо только для "удобства". Нет необходимости указывать пространство имён.
Его поместили туда потому, что его поместили в стандартную библиотеку. Все, что входит в стандартную библиотеку, должно находиться в пространстве имен std. Можно написать и так:
C++
1
2
3
4
5
6
#include <iostream.h>
 
void main()
{
cout << "Hello, world!";
}
и, по крайней мере, некоторые не очень новые компиляторы это проглотят. Но так обычно не делают. Это примерно то же, что реализовывать циклы через goto. В принципе это возможно, но не от хорошей жизни компиляторы это пропускают.
То есть необходимости указывать пространство имен действительно нет, но я для себя предпочел бы указать.

Цитата Сообщение от lazybiz Посмотреть сообщение
Т.е. когда еще не было С++, заранее задумывали что будут пространства имён и планировали поместить в него тип size_t !?)))
Ту фразу следует читать примерно так: "Древние люди не использовали консервные ножи (ввиду отсутствия у них консервов)".
0
castaway
Эксперт С++
4916 / 3024 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
31.05.2013, 23:15 #14
Цитата Сообщение от Гром Посмотреть сообщение
"Древние люди не использовали консервные ножи (ввиду отсутствия у них консервов)"
Не вижу никакого логического соответствия этой фразы с size_t в Си и С++
Так же не вижу никакого смысла указывать std:: перед size_t. Излишняя писанина. Как следствие, разобраться в коде становится сложнее.
0
Гром
210 / 129 / 11
Регистрация: 20.03.2009
Сообщений: 1,103
Записей в блоге: 16
Завершенные тесты: 1
31.05.2013, 23:29 #15
Цитата Сообщение от lazybiz Посмотреть сообщение
Не вижу никакого логического соответствия этой фразы с size_t в Си и С++
В изначальной фразе я имел виду, что в Сях не было никакого пространства имен, поэтому некуда было помещать этот грешный size_t. Тогда никто и представить себе не мог, что можно его засунуть в это несуществующее понятие. Соответственно, я не имел в виду ничего вроде "вот в плюсах есть пространство имен, поэтому size_t находится в std, а сишники смотрели на плюсы и завидовали, но поместить size_t в std не могли, потому что не было у них неймспейсов".
Наверное, стоило сказать так: "В Си нет понятия пространства имен, поэтому все члены стандартной библиотеки находятся в глобальной области видимости. size_t не исключение".

Цитата Сообщение от lazybiz Посмотреть сообщение
Так же не вижу никакого смысла указывать std:: перед size_t. Излишняя писанина. Как следствие, разобраться в коде становится сложнее.
Тут, думаю, каждый решает для себя сам. С оглядкой, конечно, на сопровождающего код психопата с манией убийства.
0
31.05.2013, 23:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2013, 23:29
Привет! Вот еще темы с ответами:

Как скопировать часть массива WCHAR в массив BYTE? - C++
Пытаюсь зашифровать строку в AES. wTextIn - исходный текст wTextOut - шифрованный byte bDataBlocks = {0}; // Буффер WCHAR *...

Скопировать второе слово каждой строки в начало следующей строки - C++
Привет, прошу помощи! Заранее спасибо! Индивидуальное задание: Скопировать второе слово каждой строки в начало следующей строки ...

Отбросить от строки последние N символов и вывести оставшуюся часть строки - C++
:help: 1. Лабораторная работа №1. Ввод-вывод в стандартные файлы. Задание: разработать программу с использованием базовых системных...

Если длина введенной строки кратна 4, первую часть строки поменять местами со второй - C++
Если длина введенной строки кратна 4, первую часть строки поменять местами со второй.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.