|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Дек 4, 2002 20:01:29 Народ, подскажите. Есть кусок текста, например: "Assembler is the best language" как найти слово "best" а затем вывести его в MessageBox'e? |
|
|
Дата: Дек 5, 2002 02:20:01 · Поправил: Безпощадный даос
msg(strstr("Assembler is the best language", "best", 1))
strstr proc pszHaystack:PTR BYTE, pszNeedle:PTR BYTE, dwCaseSensitive:DWORD
push esi
push edi
xor eax, eax
xor ecx, ecx
xor edx, edx
mov esi, [pszHaystack]
mov edi, [pszNeedle]
@@char: mov al, byte ptr [esi]
mov ah, byte ptr [edi]
cmp byte ptr [dwCaseSensitive], 0
jne @@cmp1
cmp al, "Z"
ja @@cmp0
cmp al, "A"
jb @@cmp0
add al, 32
@@cmp0: cmp byte ptr [dwCaseSensitive], 0
jne @@cmp1
cmp ah, "Z"
ja @@cmp1
cmp ah, "A"
jb @@cmp1
add ah, 32
@@cmp1: cmp al, ah
jne @@next
inc ecx
mov eax, esi
inc edi
inc esi
cmp byte ptr [esi], 0
je @@quit
inc eax
cmp byte ptr [edi], 0
je @@quit
jmp @@char
@@next: mov edi, [pszNeedle]
test ecx, ecx
setz dl
add esi, edx
xor ecx, ecx
xor eax, eax
cmp byte ptr [esi], 0
jne @@char
@@quit: sub eax, ecx
pop edi
pop esi
ret
strstr endp |
|
|
Дата: Дек 5, 2002 02:22:42 |
|
|
Дата: Июл 25, 2003 02:02:45 · Поправил: Безпощадный даос Извини ,что на С++ //mona #include<stdio.h>toda budet C
//no ya nachinal na C
/*если не поленишься организуй рекурсию ,будет any word naxodit.......*/
#include<iostream.h>
#include<conio.h>
int main()
{
char* answer=new(char);
char* message="Assembler is the best language";
int i=0;
while(message[i])
{
if (message[i]==' ')
{
if(message[i+1]=='b')
{
if(message[i+2]=='e')
{
if(message[i+3]=='s')
{
if(message[i+4]=='t')
{
if(message[i+5]==' ')
{
answer="best";
}
}
}
}
}
}
i++;
}
cout<<answer<<"\n";//a tut printf("%s",answer);
getch();
} |
|
|
Дата: Июл 25, 2003 02:19:53 Ещё вариант: ; Check whether str1 is a substring of str2: ; str1 should always be in uppercase ; --------------------------------- ; Returns: No - 0 ; Yes - other ; ESI points to substring ; ================================= IsSubStr PROC str1:DWORD,str2:DWORD mov esi,str2 mov edi,str1 xor eax,eax xor ecx,ecx cld @@: lodsb test eax,eax jz _endloop ; no match mov cl,BYTE PTR [edi] jecxz _endloop ; match! inc edi cmp eax,ecx je @B add al,32 cmp eax,ecx je @B mov edi,str1 jmp @B _endloop: sub edi,str1 sub esi,edi ret IsSubStr ENDP |
|
|
Дата: Июл 25, 2003 04:28:16 PING Ваш вариант может вызвать GPF. |
|
|
Дата: Июл 25, 2003 15:44:12 А при желании, можно упомянуть ещё и Бойера с Муром... ;) |
|
|
Дата: Июл 25, 2003 23:55:34 ;FASM include '%include%/win32ax.inc' .data templ db 'best' ;4 txt db 'Assembler is the best language' ;30 .code start: mov edx,txt mov eax,30 ;3 mov edi,templ mov ebp,4 ;_________________________________ ; ВХОД: ; edx= начальный адрес области памяти, где ищем ; eax= длина области поиска, byte ; edi= адрес образца искомой строки ; ebp= длина образца искомой строки, byte ; ВЫХОД: ; ZF=1 строка найдена, ZF=0 строка не найдена ; edx= адрес первого байта вхождения строки ; esi= адрес байта следующего за последним байтом вхождения строки ; edi= сохраняется адрес образца ; ebp= сохраняется длина образца искомой строки, byte ;__________________________________ sub eax,ebp ;искать ли вообще? neg eax jg endsearch ;искать нет смысла: область поиска < длины строки, установить ZF=0 ;собственно поиск: @@: mov ecx,ebp mov esi,edx push edi ;сохранить адрес образца repe cmpsb pop edi ;восстановить адрес образца jz endsearch ;найдено, ZF=1 inc eax ;проверить искать ли дальше jg endsearch ;не найдено, ZF=0 inc edx ;новый адрес начала поиска jmp @b ;новый поиск endsearch: ;___________________________________ jnz @F mov [esi], byte 0 invoke MessageBox,HWND_DESKTOP,edx,'стокa есть',MB_OK jmp exit @@: invoke MessageBox,HWND_DESKTOP,':-( ','такой строки нет',MB_OK exit: invoke ExitProcess,0 .end start |
|
|
Дата: Июл 26, 2003 19:39:57 |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.069 |