|
супермизантроп
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
|
|
Быстрый способ создания строковой переменной из значений нескольких строковых переменных26.12.2017, 21:52. Показов 5948. Ответов 71
Метки нет (Все метки)
К примеру, в javascript'e из трёх исходных строковых переменных создать одну конкатенированную рекомендуется следующим способом:
надо поместить значения исходных переменных в массив, а затем "соединить" его элементы методом join (), используя пустой разделитель '' Эта операция y = [x1, x2, x3].join (''); выполнится много быстрее, чем последовательная конкатенация трёх значений в одну переменную А как с этим обстоит дело в C++ ? Имеется ли в нём аналог метода join () и имеет ли вообще смысл этим заморачиваться? Извиняюсь за ламерский вопрос, но этот раздел вроде как для таких вопросов и предназначен, так? PS. спрашивал об этом же у "явщика", тот ответил, что для работы со строками у него есть класс "стринг-билдер", который всё это вполне эффективно делает, а как именно - ему совсем неинтересно
0
|
|
| 26.12.2017, 21:52 | |
|
Ответы с готовыми решениями:
71
Проверка значений нескольких строковых переменных
Как при выборе элемента Листбокса изменить значения нескольких строковых переменных |
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
|
| 27.12.2017, 11:27 | |
|
avgoor, да это видимо подбор пароля к чему-то. А обсуждение взлома ПО на данном форуме вообще-то запрещено
0
|
|
|
супермизантроп
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
|
|
| 27.12.2017, 12:21 [ТС] | |
|
0
|
|
|
Комп_Оратор)
|
|
| 27.12.2017, 20:06 | |
|
Господа. Я не знаю Java, но слышал, что объекты в нём это ссылки. Также как в C#. Я не говорю о простых встроенных типах, а имею ввиду именно объекты. Строки, это где то там. Но принципиальная разница строки C++ и Java в этом свете, состоит в том, что строка С++, несмотря на то, что она создаётся в куче, всё же поддерживает семантику значения. Это значит, что локальная строка возвращаемая по ссылке, это авария. То есть, я о том, что создать класс который соединяет строки используя указатели, без копирования не получится, не нарушая модель владения. Можно получить часть строки по ссылке из-вне, а часть создать в функции, например. Но их нельзя будет сцепить и вернуть.
В Jave все объекты - ссылки на кучу и они не мрут пока есть живая ссылка. Это медленно само-по себе и это сборщик хлама (что тоже медленно), но там в принципе нет головняка с жизненным циклом/владением и пр. и бр... То есть, мне кажется нельзя сравнивать и близко. Не знаю, понятно ли я говорю и говорю ли о деле (может не выспался просто).
0
|
|
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
|
| 27.12.2017, 20:18 | |
|
IGPIGP, лет 8 назад я точно так же радовался простоте выделения памяти в Java, по сравнению с С. Но со временем оказалось, что освобождать память от "висячих указателей" ничуть не проще, чем изначальная работа жизненным циклом и тем более с опосредованным управлением выделения памяти в контейнерах STL.
0
|
|
|
супермизантроп
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
|
|
| 27.12.2017, 21:19 [ТС] | |
|
вообще-то я писал о Javascript'e (а Java и Javascript -- это "две большие разницы", и не только в Одессе)
могу дать ссылку на страницу с онлайн-демонстрацией работы программы, которая полностью реализует озвученную задачу, только вот не знаю -- поможет ли, ведь код там на Javascript'e, о котором, как я понял, у вас весьма смутное представление (примерно такое же, как у меня о C++ и о Jave) Для начала скажу следующее: в Javascript'e спокойно можно работать с массивом, имеющим, например, такие начальные значения [3.1415926, "string", ['a','b', 'c', d']], и в котором в любой момент может измениться тип данных любого элемента, т. е. из [число, строка, строковый массив] вполне может получиться [числовой массив, число, строка] и подобные преобразования возможны любое количество раз
0
|
|
|
Комп_Оратор)
|
|||
| 27.12.2017, 21:23 | |||
|
Но говорил я о С++ и его RAII. Тут нет тех ссылок которые позволяют сливать несколько строк не интересуясь их природой в смысле жизненного цикла. Тут ссылки и значения - это мухи и котлеты. В книге "Язык программирования С++" сп. издание, Бином, Москва, 2002. в главе 11.12 (стр.341) Класс String, Бьярне (наш) Страуструп описывает подход основанный на идиоме "разделяемое представление". Фактически данный подход связан с подсчётом ссылок, кстати. Он позволяет в некоторой степени сократить копирование. Это всё что я могу добавить. Из Одессы, - таки-да.
0
|
|||
|
супермизантроп
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
|
|
| 27.12.2017, 21:32 [ТС] | |
|
по C++ недавно подарили букинистическое издание "Как программировать на Си++" от семейства Дейтелов (Х.М. и П. Дж.), М., Бином, 1998, не знаю уж, какого оно качества, отзывы в сети пока не смотрел
0
|
|
|
Комп_Оратор)
|
||
| 27.12.2017, 21:58 | ||
![]() А о классе String из указанной книги сказал потому, что там просто и красиво показан подход позволяющий осуществлять совместное владение.
0
|
||
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
|
| 28.12.2017, 00:46 | |
|
http://cpp.sh/5e3oi - копирование строк не используется, чистая арифметика с индексами.
0
|
|
|
299 / 208 / 174
Регистрация: 11.05.2016
Сообщений: 655
|
||
| 28.12.2017, 04:02 | ||
|
Вопрос - как склеить, задача - как разодрать...
Если из С взять char[] и тыкать указателем куда следует?
0
|
||
|
супермизантроп
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
|
|
| 28.12.2017, 04:35 [ТС] | |
|
TRam_, благодарю за потраченное время
но, извините, вообще не понял про "копирование строк" -- что вы подразумеваете под этой (отсутствующей у вас в коде) процедурой? и ещё вопросы: 1) ресурс, на котором вы разместили код, на здешнем сленге называется "песочницей", или как-то иначе? и 2) можно ли на этом ресурсе "обкатать" какой-то код, который, к примеру, брал бы исходную строку из файла, и результат тоже выводил бы в файл именно с точки зрения проверки работы кода процедур (функций) языка, обеспечивающих взаимодействие программы с файловой системой компьютера?
0
|
|
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
||||||||||
| 28.12.2017, 04:44 | ||||||||||
P.S. советую всё же поставить компилятор и IDE, т.к. без пошаговой отладки будет сложно разбираться в некоторых моментах. В данном конкретном случае использовал онлайн-компилятор просто для демонстрации работы кода, отлаживал же под visual studio.
0
|
||||||||||
|
299 / 208 / 174
Регистрация: 11.05.2016
Сообщений: 655
|
||
| 28.12.2017, 04:56 | ||
|
0
|
||
|
супермизантроп
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
|
||
| 28.12.2017, 08:52 [ТС] | ||
|
вы как-то оригинально поняли моё описание моего алгоритма (виноват в этом явно я -- плохо описал, значит), и назвали его "копированием строк" ну тогда я ваш алгоритм тоже "обзову", уж извините... у вас -- нерациональное "клонирование символов исходной строки" я "строю" подстроку из 2-х символов, заношу её в искомый массив, затем "достраиваю" эту уже готовую (и нужную для вывода) подстроку ещё одним символом, и получаю подстроку из 3-х символов, затем добавляю ещё один символ, и получаю четырёхсимвольную подстроку. вы же параллельно "строите" все подстроки одновременно -- символов-"кирпичиков" и действий вам требуется много больше, чем мне ![]() PS. тут выше прозвучала креативная мысль о том, что это нужно якобы для взлома ПО поясняю -- это частный случай обычной лингвистической задачи -- "нахождение всех фраз / словосочетаний в предложении", просто "слова" здесь -- одиночные символы, и разделителей вовсе нет
0
|
||
|
Комп_Оратор)
|
||||||||||
| 28.12.2017, 08:59 | ||||||||||
|
Б (Бог). Страуструп провозгласил, что тот кто истинно поверит в то что Resource Acquisition это таки Initialization имеет шанс попасть в RAII ещё до смерти.
0
|
||||||||||
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
||
| 28.12.2017, 12:14 | ||
|
А так, если рассматривать именно различие "копирование по одному" vs "копирование готовыми кусками", то собственно данных будет скопировано ровно точно такое же количество (т.к. суммарное число символов во всех полученных строках что 1ым способом, что 2ым способом останется одинаковым). Отличия будут в проверках выделенности памяти для очередного копирования, но тут "абсолютного преимущества" у сложения коротких строк нет - потому что проверки "поместится-не поместится с учётом длины первой строки и длины второй". А вот в Java наоборот, там 10 операций добавления символа будут в 5-10 раз дольше, чем одна операция добавления подстроки с 10ю символами. И там действительно работа с подстроками имеет смысл.
0
|
||
|
супермизантроп
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
|
||||||
| 29.12.2017, 08:52 [ТС] | ||||||
Сообщение было отмечено Kuzia domovenok как решение
Решение
TRam_,
покрутил эту программку 50 раз, всякий раз меняя и количество формируемых массивов, и длину исходной строки, и её символы на рандомные значения, и сохранял время формирования массивов (не учитывая время на вывод результата в текстовой файл -- это совсем другая задача) затем при тех же условиях прокрутил 50 раз программу, работающую по моему алгоритму (который последовательно из массива 2$ делает массив 3$, а из него -- 4$ и т. д. ) в итоге: на javascript'e мой алгоритм в среднем работает почти в 6 раз быстрее вашего Так что, хоть убейте, но просто не могу поверить, что Cи++ в работе со строками настолько (!!!) отличается от прочих языков программирования, что для достижения эффективного результата в нём необходимо менять нормальную логику на какую-то "плюсанутую"
0
|
||||||
|
|
|
| 29.12.2017, 15:09 | |
|
С++ и javascript: Они изначально в разных весовых категориях (компилируемый язык со статической типизацией против интерпретируемого языка с динамической). По алгоритмам не скажу, если будут на С++ - могу потестировать.
0
|
|
| 29.12.2017, 15:09 | |
|
Сложение значений переменных как строковых при их численном значении Получить значение переменной из потока без создания глобальных переменных Вывод значений нескольких переменных Ввод нескольких значений переменных Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет!
За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|