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

Преобразовать строку так, чтобы после каждой точки был пробел, и следующая встречающаяся буква была прописная.

16.05.2017, 09:15. Показов 1230. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задана строка минимум 30 любых отображаемых символов, содержащая несколько точек. Преобразовать строку так, чтобы после каждой точки был пробел, и следующая встречающаяся буква была прописная.
Элементы строки должны вводиться с клавиатуры. Результат работы – преобразованную строку символов - необходимо вывести на экран. Обмен информацией с пользователем организовать в виде специальных сообщений, каждое из которых следует размещать в отдельной строке экрана.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.05.2017, 09:15
Ответы с готовыми решениями:

Преобразовать строку, чтобы после каждой точки был пробел, и следующая буква после точки были заглавная
Задание: Ввести с клавиатуры строку, содержащую несколько точек. Преобразовать строку, чтобы после...

Ввести с клавиатуры строку с несколькими точками и преобразовать её так, чтобы после каждой точки был пробел
Задача заключается в том, чтобы ввести с клавиатуры строку, содержащую несколько точек и...

Отформатировать строку так, чтобы после каждой точки стоял пробел
Форматирование текста. Дан текст, состоящий из предложений, разделяемых точками. Напишите...

Преобразовать строку так, чтобы между словами был ровно один пробел
Дана строка-предложение с избыточными пробелами между словами. Преобразовать ее так, чтобы...

6
Ушел с форума
Автор FAQ
16161 / 7499 / 1031
Регистрация: 11.11.2010
Сообщений: 13,498
16.05.2017, 09:31 2
Я не знаю МСС,
Правила форума CyberForum.ru
4. Порядок создания тем.
4.7. Как можно более полно описывайте суть проблемы или вопроса, ЧТО было сделано для ее решения и КАКИЕ РЕЗУЛЬТАТЫ ПОЛУЧЕНЫ.
0
0 / 0 / 0
Регистрация: 16.05.2017
Сообщений: 7
16.05.2017, 09:39  [ТС] 3
Более точно некуда

Добавлено через 6 минут
Задана строка минимум 30 любых отображаемых символов, содержащая несколько точек. Преобразовать строку так, чтобы после каждой точки был пробел, и следующая встречающаяся буква была прописная.
Элементы строки должны вводиться с клавиатуры. Результат работы – преобразованную строку символов - необходимо вывести на экран. Обмен информацией с пользователем организовать в виде специальных сообщений, каждое из которых следует размещать в отдельной строке экрана.
Задачу необходимо сделать на процессоре i8086.
0
Модератор
Эксперт по электронике
8340 / 4234 / 1605
Регистрация: 01.02.2015
Сообщений: 13,186
Записей в блоге: 5
20.05.2017, 21:05 4
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
LOCALS
 
.model small
 
.stack 100h
 
.data
        msgInStr        db      'Введите строку, длиной не менее 30 отображаемых символов:', 0Dh, 0Ah, '$'
        msgResStr       db      'Строка после обработки:', 0Dh, 0Ah, '$'
        msgShortStr     db      'Длина строки должна быть не менее 30 отображаемых символов.', 0Dh, 0Ah, '$'
        CrLf            db      0Dh, 0Ah, '$'
 
        kbdBuf          db      80
        StrLen          db      0
        String          db      81 dup(?)
.code
 
main    proc
        mov     ax,     @data
        mov     ds,     ax
 
        ;ввод строки
@@GetString:
        mov     ah,     09h
        lea     dx,     msgInStr
        int     21h
        mov     ah,     0Ah
        lea     dx,     kbdBuf
        int     21h
        mov     ah,     09h
        lea     dx,     CrLf
        int     21h
        cmp     StrLen, 30
        jae     @@ProcessString
        mov     ah,     09h
        lea     dx,     msgShortStr
        int     21h
        jmp     @@GetString
 
@@ProcessString:
        ;обработка строки
        push    es
        push    ds              ;настроить регистр сегмента es для строковых операторов
        pop     es
        lea     si,     String  ;ds:si - адрес строки
        lea     di,     StrLen  ;ds:di - адрес байта длины строки
        mov     cx,     0       ;cx - длина строки
        mov     cl,     StrLen
        mov     ah,     0       ;признак необходимости преобразования символа к прописному
@@For:
        lodsb
        cmp     al,     '.'
        jne     @@IsUpCaseRequired
        ;если встретилась точка:
        ; - установить признак, что следующий символ должен быть прописным
        ; - проверить, не последний ли это символ в строке.
        ; - проверить наличие пробела после точки
        ; - если пробела нет - вставить
        mov     ah,     1       ;следующий символ необходимо слелать прописным
        cmp     cx,     1       ;это последний символ в строке?
        je      @@Next
        cmp     [si],   byte ptr ' '    ;следующий символ - пробел?
        je      @@Next
        ;вставка пробела
        ;перемещение строки вправо на 1 символ
        push    ax
        push    cx
        push    si
        push    di
        pushf
 
        add     si,     cx
        sub     si,     2
        mov     di,     si
        add     di,     1
        sub     cx,     1
        std
        rep     movsb
 
        popf
        pop     di
        pop     si
        pop     cx
        pop     ax
        ;после точки вставить пробел
        mov     [si],   byte ptr ' '
        ;увеличение длины
        inc     byte ptr[di]
        add     si,     1       ;пропустить пробел при рассмотрении следующего символв
        jmp     @@Next
 
@@IsUpCaseRequired:
        test    ah,     1       ;если требуется сделать символ прописным
        jz      @@Next
        mov     ah,     0
        call    UpCaseChar
        mov     [si-1], al
@@Next:
        loop    @@For
 
        mov     [si],   byte ptr '$'
        pop     es
 
        ;вывод результата
        mov     ah,     09h
        lea     dx,     msgResStr
        int     21h
        mov     ah,     09h
        lea     dx,     String
        int     21h
 
        mov     ax,     4C00h
        int     21h
main    endp
 
UpCaseChar      proc
        cmp     al,     'a'
        jb      @@Exit
        cmp     al,     'z'
        ja      @@Exit
        add     al,     'A'-'a'
@@Exit:
        ret
UpCaseChar      endp
 
end     main
1
0 / 0 / 0
Регистрация: 16.05.2017
Сообщений: 7
23.05.2017, 18:54  [ТС] 5
Все ровно, но данная программа ничего не делает, Она просто вводит строку но ничего не изменяет
0
Модератор
Эксперт по электронике
8340 / 4234 / 1605
Регистрация: 01.02.2015
Сообщений: 13,186
Записей в блоге: 5
23.05.2017, 20:14 6
Проверил. Всё работает. Строка изменяется.
До свиданья.
1
0 / 0 / 0
Регистрация: 16.05.2017
Сообщений: 7
26.05.2017, 20:37  [ТС] 7
Разобрался, спасибо.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.05.2017, 20:37
Помогаю со студенческими работами здесь

Преобразовать строку так, чтобы между словами был ровно один пробел
Дана строка-предложение с избыточными пробелами между словами. Преобразовать ее так, чтобы между...

Преобразовать строку так, чтобы между словами был ровно один пробел
При реализации программы необходимо использовать функции обработки строк из библиотек stdlib.h и...

Преобразовать строку так, чтобы между словами был ровно один пробел
Дана строка-предложение с избыточными пробелами между словами. Преобразовать ее так, чтобы между...

Переобразовать строку так, чтобы между словами был ровно один пробел
Дана строка-предложение с избыточными пробелами между словами.Переобразовать её так, чтобы между...


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

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

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