Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/68: Рейтинг темы: голосов - 68, средняя оценка - 4.71
1 / 1 / 0
Регистрация: 28.09.2010
Сообщений: 42
1

Заменить в строке один символ на другой

26.03.2011, 15:28. Просмотров 12720. Ответов 2
Метки нет (Все метки)

Составить программу, заменяющую в строке один заданный символ на другой. Строку и символы вводить с клавиатуры, обработанную строку вывести на экран.

Пробовал переделать под нужное условие, но ничего не получилось

Добавлено через 1 час 31 минуту
Помогите изменить даный код под моё условие. Убрать подсчёт замен и добавить ввод заменяемого и заменяюшещо знака.
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
;Обработка строк. Организация ввода-вывода данных.
;задача: Дана строка текста. Заменить в нем символ 'и' на 'i'.
;    Подсчитать количество замен. Организовать ввод данных с клавиатуры
;    и вывод результатов на экран.
;===================
 .model small
 .stack 100h
 extrn write:proc ;внешняя процедура для вывода чисел
 .data
;===================================
;параметры для поля ввода
 Enter_String   db 80       ;максимальная длина
 Len_S      db ?            ;реальная длина
 Str_Field  db 80 dup(' ')  ;введенные символы (поле ввода - цепочка)
 
 Ns db '      $'     ;поле для размещения числа в строковом
                     ;представлении для последующего вывода
                     ;под число отводится 6 позиций (можно и больше)
public Enter_String,Len_S,Str_Field,Ns
;===================================
 S2    db 13,10,'Введите строку: $'
 S3    db 13,10,'Обработанная строка:',13,10,'$'  
 S4    db 13,10,'Для завершения нажмите <Enter>.$'  
 S5    db 13,10,'Количество произведенных замен <и> на <i> = $'
 k     dw 0
;===================================
 .code
 begin:
        mov ax,@data    ;инициализация
        mov ds,ax
        mov es,ax
 
        mov ah,9    ;вывод подсказки ввода
        lea dx,S2
        int 21h
    mov ah,10   ;ввод строки
    lea dx,Enter_String
    int 21h
 
    cld     
    lea di,Str_Field
    mov cl,Len_S
for:    mov al,'и'
    jcxz vyvod
    repne scasb
    je zamena
vyvod:
    ;вывод результата
    mov al,'$'
    stosb
    mov ah,9
    lea dx,S3
    int 21h
    mov ah,9
    lea dx,Str_Field
    int 21h
    mov ah,9
    lea dx,S5
    int 21h
    mov ax,k
    call write
    mov ah,9
    lea dx,S4
    int 21h
    mov ah,10
    lea dx,Str_Field
    int 21h
    jmp exit
zamena:
    inc k
    dec di
    mov al,'i'
    stosb
    jmp for
exit:
       mov ah,4ch ;выход в DOS
       int 21h
end begin
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.03.2011, 15:28
Ответы с готовыми решениями:

Заменить один символ на другой
Нужно заменить &quot;:&quot; символ на &quot;-&quot; и посчитать количество даных замен. Мой код: .model tiny .code...

Как в строке заменить один символ на другой
Здравствуйте Подскажите пожалуйста как в строке можно заменить один символ на другой

Заменить в каждой строке один заданный символ на другой заданный символ. Описать отдельной функцией замену символов
Следующие ошибки: sym, symChange необъявленные идентификаторы(26, 29; 28, 29 соответсвенно), тип...

Заменить в каждой строке один заданный символ на другой заданный символ
Даны две строки длиной длиной до 80 символов. Заменить в каждой строке один заданный символ на...

2
4048 / 1767 / 206
Регистрация: 06.10.2010
Сообщений: 3,943
26.03.2011, 17:00 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
.model tiny
.code
.486
org 100h
.startup
 
mov dl,'-'      ;на что заменяем
mov si,offset s
 
c:mov     al,'g'    ;что заменяем
  cmpxchg ds:[si],dl
  inc     si
  cmp     al,'$'    ;если дошли до конца строки - выход
jne c
 
;выводим на экран
mov ah,9
mov dx,offset s
int 21h
 
;ожидание нажатия клавиши
xor ax,ax
int 16h
ret
s db 'asdferghggg$' ;строка для замены
end
2
1 / 1 / 0
Регистрация: 28.09.2010
Сообщений: 42
26.03.2011, 18:58  [ТС] 3
спасибо НО: Строку и символы вводить с клавиатуры, обработанную строку вывести на экран.

Добавлено через 6 минут
Для ввода вывод та программа использовала внешние процедуры obj файла, как я поняд:
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
;Процедуры ввода/вывода численной информации.
;передача параметров через регистр ax.
;==========================================
    .model small
    .stack 100h
extrn Enter_String:byte:8,Len_S:byte:1,Str_Field:byte:8,Ns:byte:7
    .data
 desw dw 10
 znak dw ?
;extrn desw:word:1,znak:word:1
    
    .code
beg:
 read   proc
        public read
    ;ввод числа
    ;число вводится как строка в поле Enter_String
    ;строка переводится в число и возвращается в ax.
    ;используются как внешние переменные поля znak, desw.
    ;===============================================
        ;сохранение в стек используемых регистров
        ;(чтобы после процедуры было то же состояние процессора)
        push bx
        push cx
        push dx
        push si
    pushf
 
    mov ah,10
    lea dx,Enter_String
    int 21h         ;ввод числа в виде строки
 
    ;перевод строки в число
    lea si,Str_Field;
    mov cl,Len_S
    mov ax,0
    mov bx,0
    jcxz break  ;выход из цикла, если введена пустая строка
    mov al,[si]
    cmp al,45   ;проверка на минус.
    jne plus
    mov znak,-1
    inc si
    dec cl
    jmp forr2
plus:   mov znak,1
forr2:  mov al,[si]
    sub al,48       ;преобразование цифры к числу
    push cx
    dec cl
    jcxz break1
forr3:  mul desw
    loop forr3
break1: add bx,ax
    pop cx
    inc si
    mov ax,0
    loop forr2
    mov ax,bx
    imul znak          ;результат в ax
break:  
    popf
        pop si
        pop dx
    pop cx
    pop bx
       ret
 read   endp
 
;====================================
 write  proc
        public write
    ;используются поля памяти Ns, des (внешние переменные)
    ;перевод числа в строку Ns и ее вывод
    ;число находится в ax (параметр)
 
        ;запись в стек регистров, которые использует процедура
    push cx
        push bx
    push dx
    pushf
 
    ;очистка поля Ns (заполнение пробелами)
    lea bx,Ns
    mov cx,6
f4: mov [bx],byte ptr 32
    inc bx
    loop f4
 
    ;сохранить число в стек, если число отрицательное, взять модуль
    push ax
    cmp ax,0
    jge m1
    neg ax
 
m1: lea bx,Ns       ;в bx адрес конца поля записи цифр (символ $)
    add bx,5
forr1:
    cwd        ;подготовка к делению
    div desw       ;частное в ax, остаток в dx
                   ;остаток и есть последняя цифра числа
    add dl,48
    mov [bx],dl    ;преобразование последней цифры в символ
    dec bx         ;и запись в память по адресу в bx
    cmp ax,0
    jne forr1       ;если в ax не 0 - повторить для следующей цифры.
 
    ;проверка на отрицательность числа
    pop ax
    cmp ax,0
    jge vyvod
    mov al,45
    mov [bx],al
vyvod:
    mov dx,bx      ;загрузка в dx начала строкового представления числа
    mov ah,9
    int 21h        ;вывод строкового представления числа
 
    popf
    pop dx
    pop bx
    pop cx
    ret
 write  endp
;================
    end beg
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.03.2011, 18:58

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Заменить в каждой строке файла один заданный символ на другой заданный
Добрый день. Товарищи не подскажите как можно заменить символ ; на : чтобы искало в строках точку с...

Заменить один символ строки на другой
Моя программа считывает текстовый файл, в котором хранятся пути к нужным файлам, но при записи в...

Заменить один символ в строке на 2
Нужно Заменить один символ в строке на два символа #include &lt;iostream&gt; #include &lt;string&gt; using...

Заменить в строке один символ
Имеется строка, например: RU.800.3000.000..000RS Как заменить 17 символ &quot;.&quot; на пробел, или...


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

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

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