Заменить символы в строке - Assembler

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, уже 4 день думаю над задачей:
Задан текст,в котором есть хотя б одна точка. Переделать текст, исключивши из него все запятые, что стоят перед 1 точкой, и заменить все пробелы в тексте на “+”.
Гуглил, но код из примеров либо не компилировался, либо делал бесконечный цикл(или просто "ломал" программу). Так что я уже не знаю что делать. Пишу в GUI Turbo Assembler. Мб кто-то знает как решить данную задачку, или у кого-то есть подобный пример?

Решение задачи: «Заменить символы в строке»

textual
Листинг программы
  1. LOCALS
  2.  
  3. .model small
  4.  
  5. .stack 100h
  6.  
  7. .data
  8.         CrLf    db      0Dh, 0Ah, '$'
  9.         sText   db      'sl,ovo, drugoe slovo, i tretie slovo. a teper, posle tochki', '$'
  10.         Len     equ     $-sText-1
  11. .code
  12.  
  13. main    proc
  14.         mov     ax,     @data
  15.         mov     ds,     ax
  16.  
  17.         mov     ax,     ds
  18.         mov     es,     ax
  19.         lea     si,     sText
  20.         mov     di,     si
  21.         mov     cx,     Len
  22.         mov     bx,     0       ;признак - точки в тексте ещё не встречались
  23. @@For:
  24.         lodsb
  25.         cmp     al,     ' '
  26.         jne     @@TestPoint
  27.         mov     al,     '+'
  28.         jmp     @@Save
  29.  
  30. @@TestPoint:
  31.         cmp     al,     '.'
  32.         jne     @@TestComma
  33.         mov     bx,     1       ;выставляем признак присутствия точки в текстк
  34.         jmp     @@Save
  35. @@TestComma:
  36.         cmp     al,     ','
  37.         jne     @@Save
  38.         cmp     bx,     0
  39.         je      @@Next
  40. @@Save:
  41.         stosb
  42. @@Next:
  43.         loop    @@For
  44.  
  45.         mov     ah,     09h
  46.         lea     dx,     sText
  47.         int     21h
  48.  
  49.         mov     ax,     4C00h
  50.         int     21h
  51. main    endp
  52.  
  53. end     main

Объяснение кода листинга программы

Выполняемые действия в коде:

  1. Подключение сегмента данных к сегменту кода.
  2. Выделение стека для локальных переменных размером в 100 байт.
  3. Определение строковых констант в сегменте данных.
  4. Определение самой короткой строки из констант, используемой в качестве разделителя.
  5. Определение самой длинной строки из констант, используемой в качестве разделителя.
  6. Определение строки, которую необходимо обработать.
  7. Определение длины строки, которую необходимо обработать.
  8. Определение начального признака, указывающего на отсутствие точек в строке.
  9. Организация цикла обработки строки до тех пор, пока не встретится символ новой строки.
  10. Проверка каждого символа строки на предмет его принадлежности к допустимым символам.
  11. При обнаружении недопустимого символа замена его на символ разделителя.
  12. При обнаружении символа точки в строке установка признака окончания обработки строки.
  13. При обнаружении символа запятой в строке проверка наличия символа точки в строке.
  14. При обнаружении символа точки в строке установка признака окончания обработки строки.
  15. При обнаружении символа новой строки завершение цикла обработки строки.
  16. Вывод отформатированной строки на экран.
  17. Завершение работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.75 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут