Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
Остап Бендер
12 / 12 / 4
Регистрация: 17.11.2010
Сообщений: 143
1

Есть строка. Нужно сделать так, чтобы "re" и "not" заменялись на "***".

21.11.2010, 10:48. Просмотров 1260. Ответов 6
Метки нет (Все метки)

Есть строка. Нужно сделать так, чтобы "re" и "not" заменялись на "***".

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
Data Segment para 'Data'
max equ 255
str_prm db 'Input string ? ','$'
num_fs equ 2
findw db 're'                                   ;это
num_rp equ 3
replw  db '***'                               ;на это 
rez_prm db 'Rezult: ','$'
nums db ?
strs db max dup (' ')
newlinecode db 10,13,'$'
Data Ends
Code Segment para 'code'
Assume cs:code,ds:data,es:data
newline proc near
push AX
push DX
lea DX,newlinecode
mov AH,9
int 21h
pop DX
pop AX
ret
newline endp
Main proc far
push DS
sub AX,AX
push AX
mov AX,Data
mov DS,AX
call newline
lea DX, str_prm
mov AH,09h
int 21h
call newline
mov CX,max
lea SI,strs
xor BX,BX
mov AH,01h
mich: int 21h
mov [SI],AL
inc SI
inc BX
cmp AL, '.'
je mpt
loop mich
mpt: call newline
lea DX, rez_prm
mov AH,09h
int 21h
call newline
cmp BX,num_fs
jg mc
mov strs[BX],'$'
jmp mel
mc: mov CX,BX
sub CX, num_fs
lea SI,strs
nnb: lea DI, findw
xor BX,BX
push CX
mov CX,num_fs
mph: mov AL,[SI+BX]
cmp AL,[DI+BX]
jne mnts
inc BX
loop mph
mov CX,num_rp
xor BX,BX
lea DI, replw
mrp: mov AL,[DI+BX]
mov [SI+BX],AL
inc BX
loop mrp
pop CX
push CX
mov DI,SI
add DI,num_fs-num_rp
mshf: mov AL, [DI+num_rp]
mov [DI],AL
inc DI
loop mshf
pop CX
sub CX, num_fs-num_rp
cmp CX,0
je me
jg me2
dec SI
jmp me
me2: push CX
mnts: pop CX
inc SI
loop nnb
me: mov [SI+num_fs],'$'
mel: lea DX,strs
mov AH,9
int 21h
call newline
retf
main endp
code ends
end main
тут "re" меняет на "***", но не совсем корректно. А как "not" добавить ? Посмотрите пожалуйста, все выходные потратил на это)
Спасибо.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2010, 10:48
Ответы с готовыми решениями:

Дана строка "ababab", из этого слова надо получить "aaa"
Собственно сабж. Дана строка "ababab", надо удалить буквы "b" и получить слово "ааа" Спасибо)

Изъять слова, которые имеют префикс "re", "not", "be"
Заданы символьная строка. Слова и идентификаторы разделяются хотя бы одним символом пробела....

Необходимо строку тип ""str1" "str2"",0 преобразовать в строку типа
Необходимо строку тип ""str1" "str2"",0 преобразовать в строку типа "str2",0 ...

Заменить во вводимом тексте каждое слово "ЭВМ" словом "машина"
Здравствуйте. Поможете разобраться с ниже приведенной задачей: Заменить во вводимом тексте...

Как реализовать рекурсию через "call" и "ret"?
kak realizovat rekursiu 4erez "call" i "ret"? nujno predstavit naturalnoe 4islo v dvoi4nom vide...

6
Mikl___
Автор FAQ
13384 / 6385 / 630
Регистрация: 11.11.2010
Сообщений: 11,549
22.11.2010, 12:54 2
Остап Бендер, как-то вот так
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
.model tiny
.286
.code
org 100h
start:  mov ax,3; чистим экран
    int 10h
    mov ah,9
    mov dx,offset string1
    int 21h
    mov ah,0Ah; ввод строки
        mov dx,offset string
        int 21h      
        mov ah,9; перевод на новую строку
        mov dx,offset string2
        int 21h
    mov ch,0 
        mov si,offset string+2; адрес первого символа строки
        mov cl,string+1; количество символов
@@:     lodsb   ; вывод символа
    cmp al,'r';r?
    je a1
    cmp al,'n';n?
    je a2
a0:     int 29h
        loop @b
    jmp a3
a1:     cmp byte ptr [si],'e';re?
    jne a0
a4: mov al,'*'
    int 29h
    mov al,'*'
    int 29h
    mov al,'*'
    int 29h
    inc si
    sub cx,2
    jz a3
    jmp @b
a2:     cmp word ptr [si],'to';not?
    jne a0
    inc si
    dec cx
    jmp a4
a3: mov ah,0
    int 16h
    ret
string db 255,0,255 dup ('$')
string1 db 'Введите строку содержащую среди других слов re и not и нажмите Enter'
string2 db 0Dh,0Ah,'$' 
end start
0
murderer
3936 / 1500 / 142
Регистрация: 06.10.2010
Сообщений: 3,303
22.11.2010, 19:12 3
Ещё такой вариант
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
.model tiny
.486
.code
org 100h
start:
  mov   ax,3                   ;чистим экран
  int   10h
  mov   ah,9
  mov   dx,offset string1
  int   21h
  mov   ah,0Ah                 ;ввод строки
  mov   dx,offset string
  int   21h      
  mov   ah,9                   ;перевод на новую строку
  mov   dx,offset string2
  int   21h
  movzx bx,byte ptr [string+1] ;количество символов
  lea   si,[string+2+bx]
  neg   bx
        
  @b:mov   ah,9                 ;подготавливаем к выводу
     mov   dx,offset stars      ;строку '***'
     mov   ecx,ds:[si+bx]
     and   ecx,0FFFFFFh
     inc   bx  
     cmp   cx,'er'              ;если встретилось 're'
     je    @f 
     sub   ecx,'ton'            ;или 'not'
     je    @f                   ;то выводим '***' 
       dec   bx     
       mov   ah,2               ;иначе выводим 1 символ строки
       mov   dl,ds:[si+bx]
     @f:
     int   21h
     cmp   ecx,1                 ;если встретилось 'not' - увеличиваем указатель на 3
     adc   bx,1                  ;если 're' - на 2, иначе на 1
  jne @b
 
  mov ah,0
  int 16h
  ret
string  db 255,0,255 dup ('$')
string1 db 'Введите строку содержащую среди других слов re и not и нажмите Enter'
string2 db 0Dh,0Ah,'$'
stars   db '***$' 
end start
0
Wardencheb
0 / 0 / 0
Регистрация: 16.12.2010
Сообщений: 10
28.12.2010, 12:30 4
Kak dannyi bykvy v clove zamenitb mnogotochiem napishite plz na fasm
0
murderer
3936 / 1500 / 142
Регистрация: 06.10.2010
Сообщений: 3,303
28.12.2010, 16:47 5
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
org 100h
start:
  mov   ah,9
  mov   dx,string1
  int   21h
  mov   ah,10                  ;ввод строки
  mov   dx,string
  int   21h      
 
  mov   ah,9
  mov   dx,string2
  int   21h
  mov   ah,1                   ;ввод символа
  int   21h
  mov   bl,al
  mov   ah,9                   ;перевод на новую строку
  mov   dx,string3
  int   21h
 
  movzx di,byte[string+1]      ;количество символов
  mov   si,string+2
 
  @@:lodsb
     mov   ah,9                 ;подготавливаем к выводу
     mov   dx,stars             ;строку '...'
     cmp   al,bl                ;если встретился введённый символ
     je    f                    ;то выводим '...'
       mov   ah,2               ;иначе выводим 1 символ строки
       mov   dl,al
     f:
     int   21h
     dec   di
  jne @b
 
  xor ax,ax
  int 16h
  ret
 
string  db 255,0,255 dup ('$')
string1 db 'Введите строку и нажмите Enter',0Dh,0Ah,'$'
string2 db 0Dh,0Ah,'Введите символ',0Dh,0Ah,'$'
string3 db 0Dh,0Ah,'$'
stars   db '...$'
0
linel
1 / 1 / 0
Регистрация: 11.03.2010
Сообщений: 18
25.02.2011, 18:54 6
Будьте добры, объясните что значит строка
string2 db 0Dh,0Ah,'$'
Я поняла, что с ее помощью осуществляется переход на новую строку, а вот эти символы непонятны:0Dh,0Ah,'$'
Заранее благодарю
0
Goodwin98
2524 / 820 / 10
Регистрация: 31.05.2009
Сообщений: 1,672
26.02.2011, 16:56 7
Коды символов возврата каретки(0dh) и перевода на новую строку(0ah)
1
26.02.2011, 16:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2011, 16:56

Рассматривая массив из 8 пятиразрядных слов, найти "исключающее или" всех 8 слов для выражения "10101"
У меня дан массив из 5 байт. Рассматривая его как массив из 8 пятиразрядных слов, найти...

Сформировать новую строку так, чтобы после символа ":" был вставлен первый символ строки
НА TASM водится строка с клавиатуры с отображением на экране. Количество вводимых символов...

Сформировать новую строку так, чтобы после символа ":" был вставлен первый символ строки
Вводится строка с клавиатуры с отображением на экране. Количество вводимых символов определяется...


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

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

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