0 / 0 / 0
Регистрация: 04.12.2012
Сообщений: 13
1

MASM32: написать программу, удаляющую пробелы в конце исходной строки

04.12.2012, 07:15. Показов 2950. Ответов 11
Метки нет (Все метки)

Нужно написать программу, удаляющую пробелы в конце исходной строки.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.12.2012, 07:15
Ответы с готовыми решениями:

Написать программу, удаляющую пробелы в конце исходной строки MASM32
Здравствуйте! Нужно написать программу, удаляющую пробелы в конце исходной строки. Очень надеюсь на...

masm32 Написать программу, которая из заданной символьной строки изымает идентификаторы, которые имеют более пяти символов
Привет форумчани, уже не первый раз жалею что пошла на программиста....)) Вот есть задачки для...

Отладить программу, удаляющую из строки пробелы в конце
Есть программа, удаляющая из исходной строки пробелы, при компиляции выдаёт ошибку: language type...

Написать программу удаляющую из исходной строки заданную конфигурацию символов
Написать программу удаляющую из исходной строки заданную конфигурацию символов. Помогите...

11
639 / 482 / 12
Регистрация: 10.01.2011
Сообщений: 1,045
04.12.2012, 07:33 2
Цитата Сообщение от Tim Berg Посмотреть сообщение
Нужно написать программу, удаляющую пробелы
Какие трудности у Вас возникли при выполнении этой задачи?
0
0 / 0 / 0
Регистрация: 04.12.2012
Сообщений: 13
04.12.2012, 07:45  [ТС] 3
Ниже код, только я не понимаю, почему он не удаляет.
Или я неправильно понимаю задание?! Если в конце строки, например, добавить 5 пробелов, то он вроде бы как их не выводит. Так и должно быть?
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
.386
.model flat, stdcall
option casemap :none
    include \masm32\include\windows.inc
    include \masm32\include\user32.inc
    include \masm32\include\kernel32.inc
    includelib \masm32\lib\user32.lib
    includelib \masm32\lib\kernel32.lib
BSIZE equ 256
.data
    msg byte 'Enter string', 13, 10
    buf byte BSIZE dup (?)
    stdout dword ?
    stdin  dword ?
    cRead  dword ?
    cWritten dword ?
.code
start:
    invoke GetStdHandle, STD_OUTPUT_HANDLE
    mov stdout, eax
    invoke GetStdHandle, STD_INPUT_HANDLE
    mov stdin, eax
    invoke WriteConsoleA, stdout, addr msg, sizeof msg, addr cWritten, NULL  ;приглашение к вводу
    invoke ReadConsole, stdin, ADDR buf, BSIZE, ADDR cRead, NULL ; вводим
 
    lea edi, buf ;настраиваем edi 
    add edi, cRead ;на конец введенной строки
    dec edi     ; пропускаем байты перевода строки и возврата каретки
    dec edi
    dec edi
    mov ecx, cRead  ;количество введенных симлово
    mov al, ' ' ;в al символ для поиска
    std     ;автоуменьшение edi
    repe scasb  ;ищем все пробелы в конце строки
    inc edi     ;настраиваемся на 
    inc edi     ;последний пробел в конце строки
    push ecx
    sub ecx, cRead  ;узнаем сколько пробелов в конце строки
    neg ecx     
    inc ecx     ;хз почему, но работает (разбираться влом, ибо не себе :))
    mov al, 0   ;заполним нулями все пробелы и признак нажатия на клавишу Enter
    cld     ;автоувеличение edi
    rep stosb   ;заполняем нулями
    pop ecx     ;востановим количество символов в строке без пробелов
    mov cRead, ecx  ;указываем сколько символов нужно вывести
 
    invoke WriteConsoleA, stdout, ADDR buf, cRead, addr cWritten, NULL ;выводим строку
    invoke ReadConsole, stdin, ADDR buf, BSIZE, ADDR cRead, NULL        ;ждем нажатия Enter
    invoke ExitProcess, NULL ;завершаем прогу
end start
0
639 / 482 / 12
Регистрация: 10.01.2011
Сообщений: 1,045
04.12.2012, 07:49 4
Цитата Сообщение от Tim Berg Посмотреть сообщение
Так и должно быть?
Вы это у преподавателя уточните. Или у автора кода.
0
608 / 406 / 8
Регистрация: 26.04.2012
Сообщений: 2,065
04.12.2012, 08:12 5
Мое творение
0
Клюг
7673 / 3188 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
04.12.2012, 11:53 6
Цитата Сообщение от Fatal Error
Мое творение
Бывает. Ты не учёл, что вынь юзает ASCIZ.
Как-то так:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
.586
    .model flat, stdcall    
    option casemap :none
    include \masm32\include\windows.inc
    include \masm32\include\masm32.inc
    include \masm32\include\msvcrt.inc
    include \masm32\macros\macros.asm
    includelib \masm32\lib\masm32.lib
    includelib \masm32\lib\msvcrt.lib
.data
entr    db  'Enter string:',0
tpts    db  '%s',0
tpti    db  'was   [%s] len:%d',0Dh,0Ah,0
tpto    db  "trim'd[%s] len:%d",0Dh,0Ah,0
.data?
pbuf    dd  ?
_len    dd  ?
.code    
start:  
    invoke  crt_malloc, 256
    mov pbuf, eax
    invoke  crt_printf, ADDR entr
    invoke  crt_gets, ADDR pbuf
    invoke  crt_strlen, ADDR pbuf
    or  eax, eax        ; длина строки == 0 ?
    jz  gtfo            ; yeah
    push    eax
    invoke  crt_printf, ADDR tpti, ADDR pbuf, eax
    lea esi, pbuf       ; начало буфера
    pop ecx                     ; счётчик
    lea edi, [esi+ecx]      ; последний символ
    dec di
    mov al, 20h
    std
    repe    scasb
    cld
    inc ecx
    mov byte ptr [esi+ecx], 0
    invoke  crt_printf, ADDR tpto, ADDR pbuf, ecx
 
_exit:  call    crt__getch
gtfo:   invoke  crt_free, ADDR pbuf
    invoke  crt_exit,0
    end start
Ну масм доставляет своей тупизной.
1
608 / 406 / 8
Регистрация: 26.04.2012
Сообщений: 2,065
04.12.2012, 12:44 7
Цитата Сообщение от Charles Kludge Посмотреть сообщение
Бывает. Ты не учёл, что вынь юзает ASCIZ.
я писал под дос, а вот кто под вынь переделал не знаю.
0
Charles Kludge
04.12.2012, 12:50
  #8

Не по теме:

Цитата Сообщение от Fatal Error
я писал под дос
А, извини, не совсем в курсе.

1
639 / 482 / 12
Регистрация: 10.01.2011
Сообщений: 1,045
04.12.2012, 16:20 9
Цитата Сообщение от Fatal Error Посмотреть сообщение
я писал под дос, а вот кто под вынь переделал не знаю.
Освежи память. https://www.cyberforum.ru/asse... ost3603578.
1
0 / 0 / 0
Регистрация: 04.12.2012
Сообщений: 13
04.12.2012, 17:08  [ТС] 10
Charles Kludge, спасибо большое!
0
608 / 406 / 8
Регистрация: 26.04.2012
Сообщений: 2,065
04.12.2012, 22:10 11
Цитата Сообщение от Vadimych Посмотреть сообщение
Освежи память.
оу.. подзабыл
Добавлено через 1 минуту
Цитата Сообщение от Vadimych Посмотреть сообщение
вот кто под вынь переделал не знаю
как я еще не отматерил того, "кто под вынь переделал"

Добавлено через 5 минут

Не по теме:

Цитата Сообщение от Charles Kludge Посмотреть сообщение
А, извини, не совсем в курсе.
тогда уж ты меня извени:)

0
Charles Kludge
04.12.2012, 22:42     MASM32: написать программу, удаляющую пробелы в конце исходной строки
  #12

Не по теме:

Fatal Error,

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.12.2012, 22:42

Написать программу, удаляющую из исходной строки заданную конфигурацию символов
Помогите,пожалуйста, написать программу, удаляющую из исходной строки заданную конфигурацию...

Удалить повторяющиеся пробелы, также пробелы в начале и в конце строки (ассемблерная вставка)
Написать ассемблерную вставку, реализующую следующую обработку строки: согласно варианту. Оформить...

Написать программу инвертирования исходной строки
Напишите пожалуйста на fasm Написать программу инвертирования исходной строки

[MASM32] Выделение из исходной строки подстроки символов заданной длинны с указанного номера позиции
Ребят, помогите пожалуйста с программкой! В MASM32 написать программу выделения из исходной строки...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru