Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
Troll_Face
603 / 403 / 8
Регистрация: 26.04.2012
Сообщений: 2,070
#1

Процедура вставки подстроки в строку

22.05.2012, 15:59. Просмотров 1178. Ответов 1
Метки нет (Все метки)

поставил перед собой задачу написать программу, которая запрашивает у пользователя позицию для вставки подстроки и подстроку, затем она должна вставить введеную подстроку в исходную начиная с позиции, которую ввел пользователь (вух, вроде написалО_о). я сделал проку для сдвига строки , но она не работает, может поможете советом чо да как
Assembler
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
masm
.model small
.stack 256
.data
    Enters db 'Enter string: ', 13, 10, '$'
    nl db 13, 10, '$'
    msg1 db 'Vvedi posiciyu dlya vstavki: $'
    msg2 db 13, 10, 'vvedi stroku dlya vstavki: $'
    pos dw ?
    max db 255
    len db 0
    str1 db 255 dup (?)
    max1 db 30
    len1 db 0
    str2 db  30 dup (?)
    buf db 4, 0, 4 dup (?)
    
.code
start:
    mov ax, @data
    mov ds, ax
    mov es, ax
    
    lea dx, enters
    mov ah, 9
    int 21h
    lea dx, max
    mov ah, 10
    int 21h
    lea dx, nl
    dec ah
    int 21h
    lea dx, msg1
    int 21h
    call inputint
    dec ax
    mov pos, ax
    lea dx, msg2
    mov ah, 9
    int 21h
    lea dx, max1
    inc ah
    int 21h
    call sdvig
    lea si, str2
    lea di, str1
    add di, pos
    inc di
    mov cl, len1
    xor ch, ch
    cld
    rep movsb
    lea dx, nl
    mov ah, 9
    int 21h
    lea dx, str1
    int 21h
Exit:
    mov ah, 4ch
    int 21h
 
sdvig proc
    lea si, str1
    mov di, si
    add si, pos
    add di, pos
    add di, len
    cld
    mov cl, len
    sub cl, pos
    xor ch, ch
    mov word ptr buf[0], cx
@@3:
    push cx
    mov cx, word ptr buf[0]
    rep mov
    mov al, '$'
    stosb
    ret
sdvig endp
 
InputInt proc 
    mov ah, 10
    lea dx, buf
    int 21h
    mov si, 2
    mov bl, 10
    xor dx, dx
    xor ax, ax
@2:
    mov cl, buf[si]
    cmp cl, 13
    je @@1
    sub cl, 30h
    mul bl
    add ax, cx
    inc si
    jmp @2
@@1:
    ret
 
InputInt endp
end start
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2012, 15:59
Ответы с готовыми решениями:

Вставка подстроки в строку, асм-модуль в C
Приветствую. Надеюсь мне снова помогут. Нужно вставить подстроку в строку на...

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

Вставка подстроки в строку (раздельная компиляция Turbo Pascal и TASM)
В общем, было вот задание написать код в ассемблере и паскале, который будет...

Добавление подстроки в строку после заданного символа + перевод с Tasm на intel
В общем, вот такое задание "В исходную строку вставить после заданного символа...

Вводят строку. Найти в ней все слова с буквой "Z" и переместить их в другую строку. Вывести новую строку
Недавно начал изучать этот язык. Было все не плохо, но тут учитель решил...

1
Ant1971on
265 / 260 / 11
Регистрация: 24.12.2010
Сообщений: 328
22.05.2012, 20:10 #2
Лучший ответ Сообщение было отмечено как решение

Решение

67 - add di,len - разный размер операндов.
70 - sub cl,pose - тоже
76 - rep mov - ?
Может еще есть ошибки. Написал свой вариант(позиция считается с нуля):
Assembler
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
.model small
.stack 100h
.data
msg1    db 'String:',0dh,0ah,'$'
msg2    db 0dh,0ah,'Substring:$'
msg3    db 0dh,0ah,'Position:$'
buf1    db 80
lnt1    db ?
string  db 80 dup(?)
buf2    db 80
lnt2    db ?
sbstr   db 80 dup(?)
buf3    db 3
lnt3    db ?
pstn    db 3 dup(?)
.code
out_str macro msg
    mov ah,9
    lea dx,msg
    int 21h
    endm
entr_str macro ofst
    mov ah,0ah
    lea dx,ofst
    int 21h
    endm
start:
    mov ax,@data
    mov ds,ax
    mov es,ax
 
    out_str msg1
    entr_str buf1
    out_str msg2
    entr_str buf2
    out_str msg3
    entr_str buf3
 
    call get_position   ;Выход: ax - номер позиции.
    lea cx,string       ;Освобождаем место для подстроки.
    add cl,lnt1
    mov si,cx
    dec si          
    mov bx,si
    add bl,lnt2
    mov di,bx
    inc bx
    mov byte ptr[bx],'$'        
    lea dx,string
    add dl,al   
    sub cx,dx       
    std
    rep movsb
    lea si,sbstr        ;Вставляем подстроку.
    mov di,dx
    xor cx,cx
    mov cl,lnt2
    cld
    rep movsb
    mov word ptr[buf1],0a0dh
    out_str buf1
    xor ax,ax
    int 16h
 
    mov ax,4c00h
    int 21h
 
get_position proc
    xor ax,ax
    xor cx,cx
    mov cl,lnt3
    xor dx,dx
    xor si,si
@1: mov dl,10
    mul dl
    mov dl,pstn[si]
    and dl,0fh
    add ax,dx
    inc si
    loop @1
    ret
get_position endp
 
end start
4
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2012, 20:10

Функция вставки подстроки в строку.
size_t n; string S1,S; cout<<"Input S1 : "; getline(cin,S1,'\n');...

Функция вставки подстроки в строку
Нужна задача с функцией вставки подстроки в строку. P.S. Функция не должна...

Написать функцию вставки в строку S подстроки S1 с позиции n, используя указатели
Помогите, пожалуйста написать функцию вставки в строку S подстроки S1 с позиции...


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

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

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