Advertisement
Guest User

Untitled

a guest
May 24th, 2016
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.05 KB | None | 0 0
  1. .386
  2. PUBLIC _Find
  3. .model flat
  4. .data
  5. mystr DD ? ;строка
  6. mystr1 DD ? ;строка с ответом
  7. ans DD 0 ;покачто номер с которого начинается ответ
  8. temp DD 0 ;номер последнего пробела
  9. temp1 DD 0 ;последний ответ
  10. elem DD 256 dup(0) ; массив из количество символов в слове
  11. .code
  12.  
  13.  
  14.  
  15. _Find proc
  16.  
  17. pushad
  18.  
  19. mov ebp, esp
  20. mov eax, [ebp+40]
  21. mov mystr, eax
  22.  
  23. xor edi, edi ; тут будет храниться номер рассматриваемого символа
  24.  
  25. _not_end_of_str:
  26. mov ebx, mystr
  27. xor eax, eax
  28. mov al, byte ptr [ebx][edi] ;берем элемент
  29.  
  30. cmp eax, 0 ; проверяем на конец строки
  31. je _end_of_string
  32. cmp eax, ' '
  33. je _end_of_word ; если конец строки то надо посмотреть максимальный элемент в elem и если надо занести что надо в ans
  34.  
  35. mov ebx, offset elem
  36. mov ecx, [ebx][4*eax]
  37. inc ecx
  38. mov [ebx][4*eax], ecx
  39. inc edi
  40. jmp _not_end_of_str
  41.  
  42. _end_of_word:
  43. mov ebx, offset elem
  44. xor edx, edx
  45. xor eax, eax
  46. xor ecx, ecx
  47. _next_element:
  48. mov edx, [ebx][4*ecx]
  49. cmp eax, edx
  50. jge _not_save
  51. mov eax, edx
  52. _not_save:
  53. mov ebp, 0
  54. mov [ebx][4*ecx], ebp
  55. add ecx, 1
  56. cmp ecx, 256
  57. jl _next_element
  58.  
  59. cmp eax, temp1
  60. jle _not_new
  61.  
  62. mov temp1, eax
  63. mov ebx, temp
  64. mov ans, ebx
  65. _not_new:
  66. inc edi
  67. mov temp, edi
  68. jmp _not_end_of_str
  69. _end_of_string: ;тип сторока кончилась
  70.  
  71. mov ebx, offset elem
  72. xor edx, edx
  73. xor eax, eax
  74. xor ecx, ecx
  75. _next_element1:
  76. mov edx, [ebx][4*ecx]
  77. cmp eax, edx
  78. jge _not_save1
  79. mov eax, edx
  80. _not_save1:
  81. mov ebp, 0
  82. mov [ebx][4*ecx], ebp
  83. add ecx, 1
  84. cmp ecx, 256
  85. jl _next_element1
  86.  
  87. cmp eax, temp1
  88. jle _not_new1
  89.  
  90. mov temp1, eax
  91. mov ebx, temp
  92. mov ans, ebx
  93. _not_new1:
  94. inc edi
  95. mov temp, edi
  96.  
  97.  
  98. popad
  99. mov eax,ans
  100.  
  101. pushad
  102. mov eax, [ebp+36] ;строка для слова
  103. xor ebx,ebx ;номер элемента для него
  104.  
  105. mov ecx, [ebp+40] ;основная строка
  106. mov esi,ans ;счётчик для неё
  107.  
  108. mov dl, [ecx][4*esi] ;заносим элемент основной строки
  109. cmp al, 0 ;проверка на конец
  110. je _ex
  111. cmp al, ' ' ;проверка на пробел
  112. je _ex
  113. mov [eax][4*ebx],dl ;заносим элемент основной строки в нашу строку
  114. inc esi ;увеличиваем номер элемента основной строки
  115. inc ebx ;увеличиваем номер элемента строки для слова
  116. _ex:
  117.  
  118. mov eax, ans
  119.  
  120. popad
  121.  
  122. mov eax,ans
  123.  
  124.  
  125. ret
  126.  
  127. _Find endp
  128.  
  129. end
  130.  
  131.  
  132. #include<iostream>
  133. using namespace std;
  134. extern "C" int _cdecl Find(char*w,char*str);
  135.  
  136. void main()
  137. {
  138. char*str = new char[255];
  139. cin.getline(str, 255);
  140. char*w=new char[255];
  141. int pos=Find(w,str);
  142. cout<<pos<<endl;
  143. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement