Консультация № 136950
15.05.2008, 14:53
50.00 руб.
0 1 1
Ув. эксперты, помогите пожалуйста. Напишите программу, которая вводит символы с клавиатуры в массив длиной 80 символов. Программа должна перевернуть каждое из слов находящихся этого массива (и разделенных пробелами) в самом массиве (т. е. не использовать дополнительный массив)

Например: ввод: I am a student
вывод: I ma a tneduts

Обсуждение

давно
Посетитель
7438
7205
15.05.2008, 15:38
общий
это ответ
Здравствуйте, Sbuber!
Программа под TASM в приложении

Приложение:
.model tiny .data;Сообщенияprompt db ‘Enter string: $‘result db 0dh,0ah,‘Result: $‘press db 0dh,0ah,0ah,‘Press any key$‘;Буфер для ф-и 0ahmax db 80 ;Максимальное число символовlen db 0 ;Здесь потом будет количество реально введенныхbuf db 80 dup (0) ;Сама строка .code .startup lea dx,prompt mov ah,9 int 21h ;Приглашающее сообщение lea dx,max mov ah,0ah int 21h ;Вводим строку lea si,buf ;Адрес строки mov di,si ;По этому адресу будем писать перевернутые слова xor cx,cx ;Счетчик буквmain_loop: ;Цикл анализа символов веденной строки lodsb ;Очередной символ cmp al,0dh ;Этот код завершает строку je tail ;проанализируем cmp al,‘ ‘ ;пробел? je inverse ;на анализ push ax ;все остальные коды сохраняем в стеке! inc cx ;Увеличиваем счетчик jmp main_loop ;Повторяемinverse: ;Очередной символ - пробел test cx,cx ;пробел сразу за словом? jnz inverse_loop ;Да, есть символы слова в стеке mov di,si ;Для последующих пробелов корректируем адрес записи ; (в строке ничего не делаем) jmp main_loop ;На продолжениеinverse_loop: ;Цикл инверсии слова pop ax ;Восстанавливаем символ из стека stosb ;Пишем по адресу [di] loop inverse_loop ;Повторяем cx раз mov al,‘ ‘ ;Добавляем пробел stosb jmp main_loop ;На продолжениеtail: ;Встретился код 0dh jcxz finish ;Есть предыдущие пробелы?last_inverse_loop: ;Нет, надо перевернуть последнее слово pop ax ;Аналогично... stosb loop last_inverse_loopfinish: ;Завершаем коррекцию строки mov byte ptr [di],‘$‘ ;записью кода ‘$‘(необходимо для 9-й ф-и) lea dx,result mov ah,9 int 21h ;Выводим ‘Result:‘ lea dx,buf mov ah,9 int 21h ;Строка lea dx,press mov ah,9 int 21h ;Press any key mov ah,0 int 16h ;Ждем нажатие на клавишу mov ax,4c00h int 21h ;Выходим в ДОС end
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа