Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Spee
1 / 1 / 0
Регистрация: 18.10.2015
Сообщений: 7
1

Если в строке встречаются подряд 3 гласные буквы, вставить после них пробел (tasm)

21.01.2016, 21:45. Просмотров 920. Ответов 9
Метки нет (Все метки)

Дана произвольная строка, если встречаются подряд 3 гласные буквы, вставить после них пробел
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.01.2016, 21:45
Ответы с готовыми решениями:

Сравнить две строки и если в них есть разные буквы, то записать эти буквы в третью строку
Дали задачку: Ввести 2 строки символов и зарезервировать место под третью строку. Сравнить первые...

Ассемблер - вставить пробел после каждого строчного символа
1) есть строка символов. вставить пробел после каждого строчного символа. 2)посчитать количество...

Найти в строке подряд идущие буквы
3.Дана строка и число n. Верно ли, что в ней есть по крайней мере n подряд идущих букв a?

В строке, введенной с экрана, после каждой согласной буквы вставить пробел
В строке, введенной с экрана, после каждой согласной буквы вставить пробел помогите пожалуйста!

Вставить пробел в строку после каждого символа «.» «,» «!» или «?», если за этими символами не следует пробел
Вставить пробел после каждого символа «.» «,» «!» или «?», если за этими символами не следует...

9
R71MT
3708 / 1336 / 291
Регистрация: 29.07.2014
Сообщений: 2,388
Записей в блоге: 5
22.01.2016, 00:25 2
Сам пытался колдовать? Или "сделайте за меня?"
2
Spee
1 / 1 / 0
Регистрация: 18.10.2015
Сообщений: 7
22.01.2016, 15:12  [ТС] 3
R71MT, Вот, только тут заменяет символ идущий после 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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
.model small
.data
strBig db 254
len db ?
str_ db 255 dup (?)
vowels db 'aeiouyAEIOUY'
len1 = $ - vowels
 
.code      
start:
mov ax,@data
mov ds,ax
mov es,ax
 
mov ah,10
mov dx,offset strBig
int 21h
 
xor cx,cx
mov cl,len
mov bx,2                           ; флаг наличия гласных букв во введённой строке
mov si,offset strBig+2
 
@1:
lodsb                                 ; очередной символ строки записываем в регистр al
mov dx,cx                          ; длину строки сохраняем в свободном регистре
mov cx,len1
mov di,offset vowels             ; адрес строки с гласными буквами 
repnz scasb                       ; сканируем эту строку пока не встретим в ней значение равное al
mov cx,dx                          ; восстанавливаем текущее значение длины введённой строки  
jnz @2                              ; если символ в al был найден в строке с гласными
 
dec bx                               ; уменьшаем на единицу значение флага
je @3                               ; если оно стало равно нулю - выходим из цикла, две гласные подряд найдены
jmp @4                              ; и продолжаем цикл
 
@2:
mov bx,2                          ; иначе восстанавливаем значение флага
@4:
loop @1                             ; продолжение цикла
 
jmp exit                             ; если просмотрена вся строка - двух гласных подряд не нашлось, выход
 
@3:
 
mov di,si  
mov byte ptr [di],' '
rep movsb                        ; и копируем оставшиеся символы строки, затирая две гласные
mov al,24h
stosb                                ; записываем символ завершения строки '$'
 
mov al,10                          ; переводим курсор на новую строку
int 29h
 
mov dx,offset str_              ; выводим на экран результат
mov ah,9
int 21h
 
exit:
 
xor ax,ax
int 16h
 
mov ax,4c00h
int 21h
end start
0
R71MT
3708 / 1336 / 291
Регистрация: 29.07.2014
Сообщений: 2,388
Записей в блоге: 5
22.01.2016, 22:47 4
Лучший ответ Сообщение было отмечено tezaurismosis как решение

Решение

Зачем отводить для этого буфер? Обрабатывай строку на-лету...
Читаешь/сохраняешь первый символ, а потом сравниваешь его с последующими.
Если есть совпадения, проверяешь на гласную и задействуешь счётчик.
В коде ниже, можно изменять кол-во подряд/идущих символов в ту-или-иную сторону, изменив потолок в регистре 'BX' (cmp bx,2).

Вот тебе приблезительная стратегия.
Код - оптимизацией не блещет, зато размер исходника 120 байт (на фасме), и неограниченая строка без буфера:

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
ORG 100h
JMP start
 
mess0   DB  13,10,'ENTER STRING: $'
mess1   DB  13,10,'Press any key...$'
table   DB  'AEIOUYaeiouy'
 
start:
   MOV   AH,9             ; запрос на ввод строки
   MOV   DX,mess0         ;
   INT   21h              ;
   XOR   BX,BX            ; счётчик гласных тройняшек
   MOV   AH,1             ; ввод с эхо..
   INT   21h              ;
 
@@1:                      ;
   MOV   DH,AL            ; DH = предыдущий символ
   MOV   AH,1             ; ввод с эхо..
   INT   21h              ;
   CMP   AL,13            ; это Enter?
   JE    exit             ;
   CMP   DH,AL            ; это предыдущий символ?
   JNE   @@1              ;
 
   MOV   DI,table         ; 2 символа совпали!
   MOV   CX,12            ; проверим их на гласную
   REPNE SCASB            ;
   OR    CX,CX            ; если пара согласная,
   JZ    @@1              ; то мотаем цикл..
 
   INC   BX               ; счётчик найденых +1
   CMP   BX,2             ; 3 символа совпали? (можно изменить предел в +/-)
   JZ    space            ; да - вставить пробел
   JMP   @@1              ; иначе: ждём следующий символ
 
space:                    ;
   MOV   AL,' '           ; вставим 'Space'
   INT   29h              ; могут быть ещё 3 гласных в строке
   XOR   BX,BX            ; 'Reset' счётчика
   JMP   @@1              ; следующий символ...
 
exit:                     ;
   MOV   DX,mess1         ; мессага "Press key"
   MOV   AH,9             ; 
   INT   21h              ; 
   XOR   AX,AX            ; 
   INT   16h              ; 
   INT   20h              ;  Gagarin...
1
Spee
1 / 1 / 0
Регистрация: 18.10.2015
Сообщений: 7
22.01.2016, 23:18  [ТС] 5
R71MT, спасибо, принцип понял. Попробывал переделать для тасм, компилируется без ошибок, но результат не выводит, не могли бы подсказать что не так?
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
.model small
.data
mess0   DB  13,10,'ENTER STRING: $'
mess1   DB  13,10,'Press any key...$'
table   DB  'AEIOUYaeiouy'
 
.code      
start:
mov ax,@data
mov ds,ax
mov es,ax
 
MOV   AH,9             ; запрос на ввод строки
   MOV   DX, offset mess0         ;
   INT   21h              ;
   XOR   BX,BX            ; счётчик гласных тройняшек
   MOV   AH,1             ; ввод с эхо..
   INT   21h              ;
 
@@1:                      ;
   MOV   DH,AL            ; DH = предыдущий символ
   MOV   AH,1             ; ввод с эхо..
   INT   21h              ;
   CMP   AL,13            ; это Enter?
   JE    exit             ;
   CMP   DH,AL            ; это предыдущий символ?
   JNE   @@1              ;
 
   MOV   DI, offset table         ; 2 символа совпали!
   MOV   CX,12            ; проверим их на гласную
   REPNE SCASB            ;
   OR    CX,CX            ; если пара согласная,
   JZ    @@1              ; то мотаем цикл..
 
   MOV   DH,AL            ; запоминаем текущий символ
   INC   BX               ; счётчик найденых +1
   CMP   BX,2             ; 3 символа совпали? (можно изменить предел в +/-)
   JZ    space            ; да - вставить пробел
   JMP   @@1              ; иначе: ждём следующий символ
 
space:                    ;
   MOV   AL,' '           ; вставим 'Space'
   INT   29h              ; могут быть ещё 3 гласных в строке
   XOR   BX,BX            ; 'Reset' счётчика
   JMP   @@1              ; следующий символ...
 
mov dx,offset mess0              ; выводим на экран результат
mov ah,9
int 21h
 
exit:                     ;
   MOV   DX,offset mess1         ; мессага "Press key"
   MOV   AH,9             ; 
   INT   21h              ; 
   XOR   AX,AX            ; 
   INT   16h              ; 
   INT   20h              ;  Gagarin...
 
 
mov ax,4c00h
int 21h
end start
Если в строке встречаются подряд 3 гласные буквы, вставить после них пробел (tasm)
0
R71MT
3708 / 1336 / 291
Регистрация: 29.07.2014
Сообщений: 2,388
Записей в блоге: 5
22.01.2016, 23:33 6
..убери в строке(47) вывод сообщения, и в строке(57) INT-20H.
Остальное вроде всё нормально. Как я уже говорил, никакого результата не будет, т.к. ввод обрабатывается на-лету, и при вводе 3-гласных букв, автоматом будет подставляться пробел. Enter - конец ввода и всё..

Не по теме:

А для спасибо есть буттон...



Добавлено через 7 минут
..э-э-э, я не внимательно прочитал задание! Я организовал фильтр 3-х/одинаковых/гласных, а тебе нужно любых гласных.
1
Spee
1 / 1 / 0
Регистрация: 18.10.2015
Сообщений: 7
22.01.2016, 23:35  [ТС] 7
R71MT, оказывается, ставится пробел только если гласные одинаковые
Если в строке встречаются подряд 3 гласные буквы, вставить после них пробел (tasm)

Не по теме:

спасибо поставил

1
R71MT
3708 / 1336 / 291
Регистрация: 29.07.2014
Сообщений: 2,388
Записей в блоге: 5
22.01.2016, 23:49 8
Spee , ..убери в своём коде строки: 17,18,21,26,27,
1
Spee
1 / 1 / 0
Регистрация: 18.10.2015
Сообщений: 7
22.01.2016, 23:56  [ТС] 9
R71MT, спасибо, добрый человек!
0
R71MT
3708 / 1336 / 291
Регистрация: 29.07.2014
Сообщений: 2,388
Записей в блоге: 5
23.01.2016, 00:12 10
Всегда пожалуйста!..
И возьми за правило, создавать темы со-своими наработками. Тогда вопрос не останется без ответа. Удачи..
1
23.01.2016, 00:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.01.2016, 00:12

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

В символьной строке удалить все слова, содержащие две подряд идущие гласные буквы
Здравствуйте, помогите пожалуйста напрсать программу, сам вообще ноль :( Условие: В символьной...

Если в строке символов подряд встречаются буква и цифра, то удалить цифру
Ввести произвольной строку символов. если подряд встречаются буква i цифра, то изъять цифру; ...


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

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

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