1 / 1 / 1
Регистрация: 16.05.2013
Сообщений: 240
1

Найти количество вхождений подстроки в строку

03.06.2016, 22:15. Показов 1487. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток!
Разработать подпрограмму, которая определяет, содержится ли одна заданная строка в другой заданной строке, и если да, то, начиная с какой позиции.
Не могу понять почему программа зациклилась на вводе второй строки.
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
.model small
stack 100h
dataseg   
InviteStr1   db 0Dh, 0Ah, 'Enter the string 1: $'
StringINP1   db 160, ?, 160 dup(?)
InviteStr2   db 0Dh, 0Ah, 'Enter the string 2: $'
StringINP2   db 150, ?, 150 dup(?)
Number       db 0
Count        db 0
ErrorStr     db 0Dh, 0Ah, 'Not found $'
OutStr       db 0Dh, 0Ah, 'Result: $'
codeseg
start:  
startupcode
    ;-------------------------------------------------------------
    lea DX, InviteStr1 ;приглашение ввести первую строку 
    mov AH, 09h
    int 21h
    lea DX, StringINP1 ;ввод первой строки
    mov AH, 0Ah
    int 21h
    ;-------------------------------------------------------------
    lea DX, InviteStr2 ;приглашение ввести втрорую строку 
    mov AH, 09h
    int 21h
    lea DX, StringINP2 ;ввод второй строки
    mov AH, 0Ah
    int 21h     
    ;--------------------------------------------------------------
    xor CL,CL
    mov CL, StringINP1+1
    COUNTER:
        lea BX, StringINP1+2    ;строка
        push BX
        lea BX, StringINP2+2    ;подстока   
        push BX
        mov BL, StringINP1+1    ;длина строки
        add DL, AL
        push BX
        call SEARCH
        sub BX, AX
        mov AX, DX
        add BX, AX
        cmp AL, -1
        je BREAK
        inc BX
    loop COUNTER    
    BREAK:
        mov AX, DX
        cmp AX, -1
        je No
        jmp Yes
    NO:
        lea DX, ErrorStr
        mov AH, 09h
        int 21h
    Yes:
        lea DX, OutStr
        mov AH, 09h
        int 21h
        mov DX, BX
        int 21h
    quit:
    exitcode 0
    
    SEARCH proc near
        pop CX      ;длина строки
        pop DX      ;подстрока
        pop BX      ;строка
        mov SI, BX
        mov DI, DX
        xor DX, DX
        SEAR:
            inc DL
            lodsb
            cmp AL, [DI]
            jne STOP
            repne cmpsb
            jne STOP
            jmp EXIT
        STOP: loop SEAR
        mov AL, -1
        EXIT: 
        mov AL, DL
        ret
        SEARCH endp
end
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.06.2016, 22:15
Ответы с готовыми решениями:

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

Как правильно найти количество вхождений символа в строку?
Всем привет Есть задание найти количество вхождений символа 'f-'. Попробовал написать программу,...

Найти количество вхождений подстроки в строку
Даны две строки символов s1, s2. Найти количество вхождений строки s2 в строку s1. Пример: вход...

Найти количество вхождений подстроки в строку
С клавиатуры вводятца две строки. Найти количество вхождений одной (являющейся подстрокой) в другую.

9
Эксперт Hardware
Эксперт Hardware
6103 / 2347 / 390
Регистрация: 29.07.2014
Сообщений: 3,108
Записей в блоге: 4
04.06.2016, 06:25 2
..строка(78)
Цитата Сообщение от gordan11 Посмотреть сообщение
repne cmpsb
В большинстве случаях для строковых команд применяются такие варианты префиксов:
Код
   REP   - применяется для MOVSB (копирование строки)
   REPE  - применяется для CMPSB (сравнение строк)
   REPNE - применяется для SCASB (поиск символа в строке)
1
1 / 1 / 1
Регистрация: 16.05.2013
Сообщений: 240
04.06.2016, 11:51  [ТС] 3
Цитата Сообщение от R71MT Посмотреть сообщение
..строка(78)
Это ни чего не меняет
0
Эксперт Hardware
Эксперт Hardware
6103 / 2347 / 390
Регистрация: 29.07.2014
Сообщений: 3,108
Записей в блоге: 4
04.06.2016, 13:41 4
Цитата Сообщение от gordan11 Посмотреть сообщение
Найти количество вхождений подстроки в строку
Цитата Сообщение от gordan11 Посмотреть сообщение
которая определяет, содержится ли одна заданная строка в другой
Так что конкретно тебе надо сделать?
1
1 / 1 / 1
Регистрация: 16.05.2013
Сообщений: 240
04.06.2016, 16:39  [ТС] 5
Цитата Сообщение от R71MT Посмотреть сообщение
Так что конкретно тебе надо сделать?
Эм...
Цитата Сообщение от gordan11 Посмотреть сообщение
Не могу понять почему программа зациклилась на вводе второй строки.
0
Эксперт Hardware
Эксперт Hardware
6103 / 2347 / 390
Регистрация: 29.07.2014
Сообщений: 3,108
Записей в блоге: 4
04.06.2016, 16:58 6
..потому, что функция поиска у тебя кривая.
1
1 / 1 / 1
Регистрация: 16.05.2013
Сообщений: 240
04.06.2016, 17:19  [ТС] 7
Цитата Сообщение от R71MT Посмотреть сообщение
..потому, что функция поиска у тебя кривая.
Может я не прав, но как мне кажется, до функции поиска программа и не доходит
Assembler
1
2
3
4
5
6
    lea DX, InviteStr2 ;приглашение ввести втрорую строку 
    mov AH, 09h
    int 21h
    lea DX, StringINP2 ;ввод второй строки
    mov AH, 0Ah
    int 21h
вот эти строка зациклились непонятно по чему. Т.е. на экране я вижу
Enter the string 1: /ввожу строку/
Enter the string 2: /ввожу строку/
Enter the string 2: /ввожу строку/
Enter the string 2: ...
И так до бесконечности.
При чем тут функция когда ввод строки находится вне цикла?
Если я не прав, то может быть вы мне нормально объясните где я не прав, т.к. ассембер я знаю очень плохо

Добавлено через 14 минут
Цитата Сообщение от R71MT Посмотреть сообщение
Так что конкретно тебе надо сделать?
Сделать функцию которая возвращает номер первого вхождения построки в строку, а программа должна считать количество вхождений
0
Эксперт Hardware
Эксперт Hardware
6103 / 2347 / 390
Регистрация: 29.07.2014
Сообщений: 3,108
Записей в блоге: 4
04.06.2016, 17:24 8
Попробуй добавить переход для отладки.
Если глюк в функции, то проблема должна исчезнуть:
Assembler
1
2
3
4
5
6
7
8
;строка(29)
jmp  yes
 
; в строке(61)
xor  ax,ax
int  16h
mov  ax,4c00h
int  21h
1
1 / 1 / 1
Регистрация: 16.05.2013
Сообщений: 240
04.06.2016, 17:51  [ТС] 9
Цитата Сообщение от R71MT Посмотреть сообщение
Попробуй добавить переход для отладки.
Если глюк в функции, то проблема должна исчезнуть:
Глюк исчез.
Теперь вопросы:
1. Что это за магия?
2. Что я не правильно сделал?
0
Эксперт Hardware
Эксперт Hardware
6103 / 2347 / 390
Регистрация: 29.07.2014
Сообщений: 3,108
Записей в блоге: 4
04.06.2016, 18:00 10
Цитата Сообщение от gordan11 Посмотреть сообщение
При чем тут функция когда ввод строки находится вне цикла?
При том, что после ввода второй строки, сразу начинает выполняться функция, а в ней - непонятно что. Вполне возможно, что просто в строке(61) неправильный выход. Оставь изменения и закоментируй отладочный переход. Дальше отладчиком, в котором можно выловить всех блох..
1
04.06.2016, 18:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.06.2016, 18:00
Помогаю со студенческими работами здесь

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

Количество вхождений подстроки в строку
Здравствуйте. Задача такая: Дан текст на русском языке. Выяснить, входит ли данное слово в...

Определить количество вхождений подстроки в строку.
Я не бум-бум в информатике,а писать контрольную задано всем!Помогите!Заранее благодарю 1.Составить...

Количество вхождений подстроки в строку без Pos
Даны строки S и S0. Найти количество вхождений строки S0 в строку S. Не использовать стандартные...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru