Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
5 / 2 / 1
Регистрация: 01.11.2012
Сообщений: 121

Как продублировать каждый символ в слове

19.12.2012, 16:59. Показов 1413. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
привет светлые умы, вот такое вот задание: в текстбокс вводится слово, программа должна вывести этоже слово, только продублировав кажлый знак, ну допустим ввели мы "привет5" после нажатия кнопки получаем "ппррииввеетт55"... сделать надо с помощью оператора мид.... помогите пожалуйста
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.12.2012, 16:59
Ответы с готовыми решениями:

В слове, состоящем из букв и цифр и заканчивающимся точкой, продублировать каждый нецифровой символ
Помогите пожалуйста разобраться. В слове, состоящем из букв и цифр и заканчивающимся точкой, продублировать каждый нецифровой символ....

Продублировать каждый символ в тексте
Добрый день! Помогите решить задачу: Нужно самостоятельно ввести текст, програма должна продублировать каждый символ, вывести на экран....

Получить из данной строки новую строку, в которой каждый символ продублировать
Окажите, пожалуйста, помощь в решении задачи: Получить из данной строки новую строку, в которой каждый символ продублировать.

10
 Аватар для Апострофф
9908 / 3924 / 742
Регистрация: 11.10.2011
Сообщений: 5,907
19.12.2012, 19:15
Visual Basic
1
2
3
4
5
6
7
8
9
Function s_2(s As String) As String
For i = 1 To Len(s)
    s_2 = s_2 & String$(2, Mid$(s, i, 1))
Next i
End Function
 
Sub example()
MsgBox s_2("привет5")
End Sub
2
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
21.12.2012, 20:52
Если следовать условию "с помощью оператора мид", то так:
Visual Basic
1
2
3
4
5
6
7
Function s_2(s As String) As String
Dim i&
s_2 = Space$(Len(s) * 2)
For i = 1 To Len(s)
    Mid(s_2, i * 2 - 1) = String$(2, Mid$(s, i, 1))
Next i
End Function
При длинных строках так, действительно, быстрее.
1
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
21.12.2012, 22:19
Цитата Сообщение от MrLimon Посмотреть сообщение
сделать надо с помощью оператора мид
Visual Basic
1
2
3
4
5
6
7
8
9
Function s_2(s As String) As String
    For i = 1 To Len(s)
          s_2 = s_2 & Mid$(s, i, 1) & Mid$(s, i, 1)
    Next i
End Function
 
Sub example()
    MsgBox s_2("привет5")
End Sub
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
21.12.2012, 23:13
Так ты ФУНКЦИЮ Mid используешь, а не ОПЕРАТОР
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
21.12.2012, 23:26
Да, действительно погорячился.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38195 / 21128 / 4309
Регистрация: 12.02.2012
Сообщений: 34,733
Записей в блоге: 14
22.12.2012, 11:20
А так:

Visual Basic
1
2
3
4
5
6
7
Function dup(S As String) As String
         If Len(S) = 1 Then
            dup = S & S
         Else
            dup = dup(Mid$(S, 1, 1)) + dup(Mid$(S, 2))
         End If
End Function
1
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
22.12.2012, 12:03
Лучший ответ Сообщение было отмечено как решение

Решение

Catstail, это, конечно, прикольно, но уже при длине строки 5000 символов вылетает с ошибкой переполнения стека. Ну и время:
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Function s_2(s As String) As String
Dim i&
For i = 1 To Len(s)
    s_2 = s_2 & String$(2, Mid$(s, i, 1))
Next i
End Function
 
Function s_3(s As String) As String
Dim i&
s_3 = Space$(Len(s) * 2)
For i = 1 To Len(s)
    Mid(s_3, i * 2 - 1) = String$(2, Mid$(s, i, 1))
Next i
End Function
 
Function dup(s As String) As String
         If Len(s) = 1 Then
            dup = s & s
         Else
            dup = dup(Mid$(s, 1, 1)) + dup(Mid$(s, 2))
         End If
End Function
 
 
Sub example()
Dim t!, s$
s = Space$(4000)
DoEvents
t = Timer
s_2 s
Debug.Print "Склеивание", Format(Timer - t, "0.000")
DoEvents
t = Timer
s_3 s
Debug.Print "Оператор Mid", Format(Timer - t, "0.000")
DoEvents
t = Timer
dup s
Debug.Print "Рекурсия", Format(Timer - t, "0.000")
 
End Sub
Code
1
2
3
Склеивание    0,051
Оператор Mid  0,008
Рекурсия      0,270
1
 Аватар для Апострофф
9908 / 3924 / 742
Регистрация: 11.10.2011
Сообщений: 5,907
22.12.2012, 12:25
При Space$(40000)
Code
1
2
Склеивание    4,797
Оператор Mid  0,031
в 155 раз
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38195 / 21128 / 4309
Регистрация: 12.02.2012
Сообщений: 34,733
Записей в блоге: 14
22.12.2012, 13:53
Цитата Сообщение от Казанский Посмотреть сообщение
Catstail, это, конечно, прикольно
- так я для прикола и делал...

Добавлено через 9 минут
А вот в этом коде:

Visual Basic
1
2
3
4
5
6
7
Function s_2(s As String) As String
Dim i&
s_2 = Space$(Len(s) * 2)
For i = 1 To Len(s)
    Mid(s_2, i * 2 - 1) = String$(2, Mid$(s, i, 1))
Next i
End Function
лучше, мне кажется, поступить так:

Visual Basic
1
2
3
4
5
6
7
8
9
Function s_2(s As String) As String
Dim i&
s_2 = Space$(Len(s) * 2)
For i = 1 To Len(s)
    a$=Mid$(s, i, 1)
    Mid(s_2, i * 2 - 1,1) =a$ 
    Mid(s_2, i * 2 ,1) = a$
Next i
End Function
Соотношение производительностей оказывается примерно 8/6 в пользу отказа от String$
1
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
23.12.2012, 03:02
Цитата Сообщение от Апострофф Посмотреть сообщение
в 155 раз
Дык чем длиннее строка, тем в большее число раз будет разница
Потому что с оператором Mid количество вычислений линейно зависит от длины строки, а с оператором & - квадратично. Ведь при каждом склеивании выделяется память под новую строку, туда переписывается прежняя строка плюс добавляемые символы, освобождается память, занятая прежней строкой. А оператор Mid вставляет символы в существующую строку.

Добавлено через 11 часов 57 минут
Цитата Сообщение от Catstail Посмотреть сообщение
Соотношение производительностей оказывается примерно 8/6 в пользу отказа от String$
Ценное замечание!
А так - еще в 2 раза быстрее
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Declare Sub CopyMem Lib "kernel32" Alias "RtlMoveMemory" (Dst As Any, Src As Any, ByVal Length As Long)
Const L2& = 2
 
Function s_6(s As String) As String
Dim i&, j&
s_6 = Space$(LenB(s))
j = StrPtr(s_6)
For i = StrPtr(s) To StrPtr(s) + LenB(s) - L2 Step L2
    CopyMem ByVal j, ByVal i, L2
    CopyMem ByVal j + L2, ByVal i, L2
    j = j + 4&
Next i
End Function
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.12.2012, 03:02
Помогаю со студенческими работами здесь

Удвоить каждый символ в слове P
1. A={a ,b, c}. Удвоить каждый символ в слове P (например: bacb→bbaaccbb).

Определить, сколько раз каждый символ встречается в слове
Модернизировать программу var a,b,c: string; i,j: integer; begin write ('Введите текст'); readln(a); b:= ''; for i:=1 to...

Удалить все "*" и продублировать каждый символ, отличный от заданной цифры, если она присутствует в исходной с
кто может объяснить,что значит отличный от заданный цифры?

В бинарном слове поменять местами каждый первый символ с каждым вторым
В бинарном слове поменять местами каждый первый символ с каждым вторым. По необходимости можно использовать расширение внешнего алфавита.

Дано слово на Английском языке.После каждого гласного символа встав те символ “ * ”. Удалите последний гласный символ в слове.Если в слове нет гласных
Дано слово на Английском языке.После каждого гласного символа встав те символ “ * ”. Удалите последний гласный символ в слове.Если в слове...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru