Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.04.2011, 12:41   #1
Bujhm127
Новичок
Джуниор
 
Регистрация: 08.04.2011
Сообщений: 1
Радость Нахождение слова в строке

Здравствуйте! У меня возникла такая проблема. Необходимо найти слово в строке. Программа находит слово, но так же (этого не должно быть по заданию) она находит вхождение отдельных символов в слова, например будем искать слово "из" в строке "изобразительное искусство" и оно выведет, что слово найдено, хотя не должно быть такого. Как это исправить? Помогите пожалуйста.

Код:
data segment
mess1 db 0dh,0ah,"Vvedite stroku",0dh,0ah,"$"
mess2 db 0dh,0ah,"Vvedite slovo",0dh,0ah,"$"
mess3 db 0dh,0ah,"Naidenno",0dh,0ah,"$"
mess4 db 0dh,0ah,"Ne naidenno",0dh,0ah,"$"
mess5 db 0dh,0ah," ",0dh,0ah,"$"
str1 db 50, ?, 9 dup (?)
str2 db 10, ?, 9 dup (?)
LenMax db 0
LenMin db 0
data ends
code segment
assume cs:code, ds:data
START: mov ax, data
mov ds, ax              ; Загрузить сегментный адрес данных
mov es,ax

lea dx, mess1
mov ah, 09h
int 21h                    ;приглашение к вводу строки

lea dx, str1              ; Ввод первой строки
mov ah, 0ah
int 21h

lea dx, mess2
mov ah, 09h
int 21h                    ;приглашение к вводу слова

lea dx, str2              ;Ввод второй строки
mov ah, 0ah
int 21h 

call find
xor ax,ax
mov ah, 09h
int 21h
mov ax, 4C00h         ;Код завершения 0
int 21h                    ;Выход в DOS

find proc 
mov al, str1+1
mov ah, str2+1
cmp ah,al
jg max
xor dx,dx
xor ax,ax
xor cx,cx
xor di,di
xor si,si
lea ax,str1
add ax,2
add al,[str1+1]
sub al,[str2+1]
lea di,str1+2
LO1:
cmp di,ax
ja nf1
MOV Cl,str2+1
LEA SI,str2+2
REPE CMPSB
jcxz f1
jmp LO1

f1: 
lea dx, mess3
jmp quit
nf1:
lea dx, mess4
jmp quit
max:lea dx,mess5
jmp quit

quit:ret
find endp
code ends
end START



___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 08.04.2011 в 13:13.
Bujhm127 вне форума Ответить с цитированием
Старый 08.04.2011, 13:18   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я не разбирался в коде.
замечание общего плана.
Для того, чтобы отличить вхождение в слова нужно ОБЯЗАТЕЛЬНО знать, что является разделителем слов.
Если сделать допущение, слова разделяются только пробелами, тогда всё просто:
к исходной строке дописываете пробел в начале строки и пробел в конце строки.
потом к слову, которое ищете так же дописываете пробелы в начало и конец и процедуру поиска используете ту, что у Вас уже реализовано.

Если же разделителями могут являться и пробел и знаки пунктуации - тогда хуже.
Надо переделывать алгоритм. Он должен парсить строку на отдельные слова и уже каждое слова сравнивать с искомым...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нахождение нечислового значения в строке Keetotko Помощь студентам 3 11.11.2010 16:57
Файлы/Нахождение макс. слова на СИ Sultan237 Помощь студентам 4 08.03.2010 11:43
Нахождение и вывод максимального слова в файле на СИ Sultan237 Помощь студентам 5 05.03.2010 01:18
Нахождение самого короткого слова Диезушка Помощь студентам 2 20.10.2009 21:43
Нахождение серий символов в строке ampolez Общие вопросы C/C++ 2 19.12.2008 22:20