Консультация № 109845
17.11.2007, 14:29
0.00 руб.
0 1 1
Здравствуйте, у меня такой вопрос:

Написать программу формирования сжатой строки символов. Сжатие заключается в удалении пробелов из исходной строки при просмотре ее слева направо.

Спасибо за внимание!

Обсуждение

Неизвестный
18.11.2007, 14:58
общий
это ответ
Здравствуйте, Primus!
Программа написана с использованием строковых операций.
При чтении исходной строки проверяем на символ пробела, если символ пробел то его не записываем в выходной буфер строки, и проверяем следующий символ пока не дойдем до конца строки.
Удачи

Приложение:
title Вопрос № 109845.286;Макрос для DOS фунции 09h и 0Ahdos21 macro fun,off mov ah,fun mov dx,offset off int 21hendmstacksg segment stack dw 100h dup(?)stacksg endsdata segment str1 db ‘Введите произвольную строку‘,‘$‘ str2 db ‘Сжатая строка‘,‘$‘ string label byte ;Для ввода строки с использование mes1 db 255 ; функции 0ah mes1len db ? mes1buf db 255 dup(‘ ‘) stringnew db 0ah,0dh,‘$‘ ;Переход на новую строку mes2buf db 255 dup(‘ ‘) ;Буфер для сжатой строки mesexit db 0ah,0dh,‘Для выхода нажмите любую клавишу‘,‘$‘data ends assume cs:code,ds:datacode segmentbegin: ;Инициализация регистров DS и ES mov ax,data mov ds,ax mov es,ax ;Текстровый режим mov ax,03h int 10h dos21 09h,str1 ;Ввод приглашения dos21 09h,stringnew ;Переход на новую строку dos21 0ah,string ;Ввод исходной строки mov si,offset mes1buf ;Адрес буфера ввода mov di,offset mes2buf ;Адрес буфера вывода call press ;Процедура сжатия dos21 09h,stringnew ;Переход на новую строку dos21 09h,str2 ;Вывод сообщения dos21 09h,stringnew ;Переход на новую строку dos21 09h,mes2buf ;Вывод сжатой строки dos21 09h,mesexit ;Сообщение об выходе ;Ждать нажатия любой клавиши mov ah,0 int 16h ;Выход в DOS mov ah,4ch int 21h;**************************************************;* ПРОЦЕДУРА СЖАТИЯ СТРОКИ *;* Входные параметры: *;* DS:SI - адрес исходной строки *;* ES:DI - адрес сжатой строки *;**************************************************press proc push ax cli ;Направление строковых операций@@P0: lodsb ;Символ в al cmp al,0dh ;Код return je @@P1 ; если да, то строка закончилась переход на метку @@P1 cmp al,20h ;Код пробела je @@P0 ; если пробел то на метку @@P0 stosb ; иначе записываем символ в строку mes2buf jmp short @@P0@@P1: mov al,‘$‘ ;В конце строки mes2buf запишим символ ‘$‘ stosb pop ax retpress endpcode ends end begin
Форма ответа