Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Альма
12 / 9 / 4
Регистрация: 25.11.2010
Сообщений: 358
Записей в блоге: 1
1

Замена чисел в строке словами и удаление чисел из строки

09.06.2015, 06:33. Просмотров 218. Ответов 0
Метки нет (Все метки)

Помогите,пожалуйста, переделать программу, никак не разберусь с ассмеблером((.

Приведенный код вставляет слово number перед каждым числом, а нужно, чтобы слово number заменяло число в строке. Никак не соображу..
И ещё, как просто удалить все числа из строки?

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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
locals
DOSSEG
.model small
.stack 100h
.data
;длина строки
len    db 200
;резервный байт (для чтения)
res db 0
;сама строка
string  db 200 dup('$')
;строка 'number' с '$' на конце - определяет конец строки
number    db 'number$'
.code
;процедура сдвига строки на 6 байтов вправа (для того чтобы вставить на жто место 'number')
;в si - адрес строки с нужного места
shift    proc    near
cld
mov        di, si
xor        cx, cx
@@1:
mov        bl, byte ptr [si]
cmp        bl, '$'
je        @@2
inc        cx
inc        si
jmp        @@1
@@2:
inc        cx
mov        di, si
add        di, 6
@@3:
mov        bl, byte ptr [si]
mov        byte ptr [di], bl
dec        si
dec        di
loop    @@3
ret
shift    endp
;процедура копирования 'number' в строку
;в di - адрес строки с нужного места
copy    proc near
cld
lea        si, number
mov        cx, 6
rep        movsb
ret
copy    endp
;поиск числа
;в si - адрес строки с нужного места
find    proc near
mov        di, si
mov        bl, 1
@@start:
mov        ah, byte ptr[si]
cmp        ah, 13
je        @@4
cmp        ah, ' '
je        @@1
jmp        @@3
@@1:
cmp        bl, 1
je        @@2
mov        bl, 1
inc        si
mov        di, si
jmp        @@3
@@2:
mov        ax, di 
ret
@@4:
cmp        bl, 1
je        @@2
mov        ax, 0
ret
@@3:
mov        ah, byte ptr[si]
cmp        ah, '0'
jl        @@5
cmp        ah, '9'
jg        @@5
inc        si
jmp        @@start
@@5:
mov        bl, 0
inc        si
jmp        @@start
find    endp
;переход на новую линию
newline    proc    near
mov        dl,10
mov        ah,2
int        21h
ret
newline endp
;ввод строки
input proc near
mov        ah, 0Ah
int        21h
ret
input endp
;вывод строки
output proc near
mov        ah, 9
int        21h
ret
output endp
;основной алгоритм
do    proc near
;в si - адрес строки
lea        si, string
@@1:
push    si
;вызываем функцию find - ищем первую позицию числа
call    find
pop        si
;сравниваем ax с 0 (ax - возвращаемое значение функции find)
;если ноль - завершаем операцию
cmp        ax, 0
je        @@2
;иначе:
mov        si, di
;сдвигаем строку с позиции ax на 6 символов вправа (с помощью функции shift)
push    di
call    shift
pop        di
;копируем 'number' в нужную часть строки
call    copy
;в si - адрес строки
lea        si, string
;начинаем сначала
jmp        @@1
@@2:
ret
do    endp
;главная функция (точка входа)
start   proc    near
mov        ax, @data
mov        ds, ax
mov        es, ax
xor        ax, ax
;ввод строки
mov        dx, offset len
call    input
;основной алгоритм
call    do
;переход на новую строку
call    newline
;вывод полученной строки
mov        dx, offset string
call    output
;ожидание ввода символа
mov        ah, 0
int        16h
;завершение программы
mov        ah, 4Ch
mov        al, 0
int    21h
start   endp
end     start
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2015, 06:33
Ответы с готовыми решениями:

Операции в строке: поиск, замена, удаление символа в строке
Доброго здравия! В ассемблере совсем новичок, поэтому прошу помощи. Программа...

Нахождение, замена и удаление символа в строке
В памяти находится строка символов по адресу А1 и длиной N. Проверьте,...

[emu8086] Удаление и замена символов в строке
Распечатать введённую строку, удалив из неё символы, не являющихся буквами и...

Замена чисел от 0 до 9 в строке на "*"
Пишу в программе flat assembler, как мне заменить все цифры в строке на "*",...

[tasm] Замена отрицательных чисел нулями
Что нужно исправить, чтобы в ответе отрицательные числа заменял не знаками...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2015, 06:33

Замена отрицательных чисел нулями. Ассемблер
В обычном ассемблере CMD создать программу. Задан массив А. A DB 1,1,-2,-4,6...

Определить сумму чисел в каждой строке..
Определить сумму чисел в каждой строке и строку с минимальной суммой...

Вычислить сумму произведений чисел на их номер в строке
дана последовательность из 7 байт,размещенный в сегменте данных начиная с...


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

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

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