Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > срочно нужно написать функцию |
Автор: chudik 5.5.2007, 01:12 |
помогите написать функцию для дублирования строки например: "боб" -> "боббоб" |
Автор: anwe 5.5.2007, 01:20 |
Посмотри API-функцию lstrcat. |
Автор: apook 5.5.2007, 06:23 | ||
|
Автор: adLucem 5.5.2007, 08:39 | ||||||
Дублирование строки с выделением памяти для новой строки.
Так как DuplicateString выделяет память для строки, то не забывайте освобождать ее.
Дублирование строки без выделения памяти для новой строки.
|
Автор: Robin 5.5.2007, 08:40 |
если в переменной a достаточно места, почему не просто не скопировать в нее ее саму? ///опередили |
Автор: chudik 5.5.2007, 11:58 |
Видимо я не так выяснилась, что вы меня не поняли. Мне нужно по программированию написать функцию которая будет копировать любую введеную строку, а то был просто пример. Тоесть я с клавы ввожу любой текст, а эта функция должна его скопировать. Готовые функции использовать нельзя. функция должна быть написана самостоятельно. |
Автор: apook 5.5.2007, 12:06 | ||||||
В чем проблема? Тебе что нельзя даже подсматривать как сделаны готовые функции. Или вообще нельзя функцию писать? Или она дол жна написаться программрй во время выполнения программы ![]() |
Автор: JackYF 6.5.2007, 10:14 |
Не согласен. До 14. ![]() |
Автор: ama_kid 6.5.2007, 11:23 | ||
В качестве дополнения решения от adLucem (если все-таки дублирование строки надо сделать функцией):
Не согласен - пусть учатся с пелёнок ![]() |
Автор: nickless 6.5.2007, 13:30 | ||||
Чтоб только на указателях? Вот на двух char*-ах ![]()
|
Автор: adLucem 6.5.2007, 14:28 | ||
nickless, зачтено Немного переработанный код.
Интересно, а еще можно уменьшить количество переменных ![]() |
Автор: Dov 6.5.2007, 21:44 | ||
Сложно у вас как-то, ребяты! Аж в глазах рябит. ![]() ![]()
![]() |
Автор: adLucem 7.5.2007, 11:11 | ||
Dov, проверяйте ваш код перед публикацией ![]()
И еще - перед тем как упрощать (хотя что именно вы упростили непонятно) знакомтесь со всеми приведенными вариантами, то что вы предлагаете ничем не отличается моего кода, который был предложен как самый простой вариант (кроме использования статического массива и cin). |
Автор: betal 7.5.2007, 16:58 | ||
проще всего делать двойной вывод в этом случае ![]() |
Автор: Promitheus 8.5.2007, 10:53 | ||
Господа, а граммотно ли
Писать через #define жесткое количество элементов, а потом под них динамически память выделять ? Не экономнее ли скажем массив завести ? Или уж тогда с клавы читать количество требуемых элементов, а потом память выделять ? |
Автор: Promitheus 8.5.2007, 12:01 | ||
![]() adLucem, я прекрасно понял в чем суть вопроса. Прямого отношения к задаче (помогите написать функцию для дублирования строки) мои замечания не имеют, но косвенно всё же они относятся к и данной задаче в том числе. И я, чтобы не заводить новую тему написал сюда вопрос, сам я так не пишу, и хотел выяснить насколько это целесообразно и может быть есть подводные камни, о которых я не знаю. Ваш тон это ваше личное дело. Я бы так сделал, по-деревенски:
|
Автор: Promitheus 8.5.2007, 13:16 |
![]() Кардинально оно ничем не отличается от приведенных варинатов, но на мой взгляд оно лаконичнее и все операторы делают то, что должны. В принципе тему можно было закончить, после 3 поста, поскольку функция написана, вывод в поток есть - всё. Но коли уж Вы решили написать еще пару функций, вот я и решил задать Вам вопрос, на который, я так понимаю Вы отказываетесь отвечать ... |
Автор: adLucem 8.5.2007, 13:39 | ||
В данном случае действительно можно использовать статический массив (использование динамической памяти пришло в процессе экспериментов). Но в общем случае вопросы использования #define для задания максимального размера буфера и способа выделения памяти не связаны. |
Автор: Voldemar2004 8.5.2007, 13:56 | ||||
|
Автор: Promitheus 8.5.2007, 15:46 |
adLucem, Всё спасиб. Про то, что такое #define я знаю. ![]() |
Автор: W4FhLF 8.5.2007, 16:57 | ||||
Конечно, 1 переменная.
|
Автор: chudik 9.5.2007, 22:07 |
а как сделать так чтобы ваши программы правильно определяли длинну строки? во всех ваших программах строка ситается до пробела после пробела информация не копируется. ![]() |
Автор: dizzy1984 10.5.2007, 07:01 |
Информация копируется до символа '\0', т.е символа с кодом 0. Пробелы также копируются. |
Автор: chudik 10.5.2007, 13:24 | ||
но в том то и дело что не в одной из программ пробелы не копируются |
Автор: dizzy1984 10.5.2007, 13:49 | ||
Borland C++ 3.1
Вывел ad dsa sak ad dsa sakad dsa sak Что абсолюно верно. Пробелы скопировались. Почему вы считаете иначе? |
Автор: ama_kid 10.5.2007, 13:54 |
Он считает иначе, потому что у тебя строка присваивается жестко, а в предложенных выше вариантов - строка считывается с помощью scanf или cin, которые считывают данные до пробела... chudik, Все варианты работают правильно, только инициализацию строки надо проводить по другому. Вариант с scanf тебе предложили как наименее геморройный... Формирование строки с пробелом - это уже другая задача... |
Автор: Dronchik 11.5.2007, 13:17 | ||||
А не легчели сделать...
|
Автор: Voldemar2004 11.5.2007, 21:42 | ||
Мне кажется, самое простое это то, что я предложил:
![]() |
Автор: chudik 25.5.2007, 14:19 | ||||
а вы не могли бы закоментировать этот код |
Автор: adLucem 25.5.2007, 15:48 | ||
|
Автор: adLucem 25.5.2007, 16:23 |
W4FhLF, Не зачтено - речь шла о С/С++, а не об ассемблере. |
Автор: W4FhLF 26.5.2007, 05:56 |
Конструкция __asm {} является частью языка, поэтому всё в пределах допустимого, никаких доп. средств и извращений я не использовал. |