Поиск:

Ответ в темуСоздание новой темы Создание опроса
> строковые операции, колво вхождений каждого символа в строку 
:(
    Опции темы
Dave
Дата 31.12.2008, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 17.6.2004

Репутация: нет
Всего: 1



всем привет,

такая задача: дана строка с нулевым завершителем, для каждого символа из этой строки нужно подсчитать сколько раз он в ней встречается.

асм только начал изучать, пока изучил самые основы такие как вывод на экран строк, оператор условного перехода, циклы, процедуры... разобрался с дебаггером более-менее.

Набросайте схематично, плз, как решить задачу. Примерам кода, также буду очень рад.

PM MAIL   Вверх
kolobok0
Дата 31.12.2008, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 24.12.2008

Репутация: нет
Всего: 2



Цитата(Dave @ 31.12.2008,  00:07)
...дана строка с нулевым завершителем, для каждого символа из этой строки нужно подсчитать сколько раз он в ней встречается....схематично.. как решить задачу...

азм он разный - это раз. если под x86 семейство - это одно...если к примеру для 51 мк - другое...под AVR третье...

если схематично то,
цикл, с условием выхода на нулевое значение.
проверка на понятие "символ". сохранение счётчика на каждое значение "символа". Если "символ" - это байт со значение от нуля до 255 то мона тупо сделать массив из 255 ячеек (если максимальное кол-во повторов 255 возможна. грубо говоря это максимальная длина строки, в крайнем случае.) и предварительно его обнулив инкрементировать счётчики по смещению равному значению вашего "символа". далее сканирование вашего массива и вывод смещения - "символ" и значения - кол-во повторов...


удачи Вам
(круглый)
PM MAIL   Вверх
Dave
Дата 3.1.2009, 02:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 17.6.2004

Репутация: нет
Всего: 1



[QUOTE=kolobok0,31.12.2008,  16:08]
Цитата(Dave @ 31.12.2008,  00:07)
...инкрементировать счётчики по смещению равному значению вашего "символа".

как именно это сделать? можно пример ? 
 вот я ввожу строку  с клавиатуры, юзаю ф-ю 01h для получения символа с клавиатуры , я так понимаю что уже в этом месте я могу инкрементировать нужный счетчик, так  ?

я представляю как решить эту задачу на php , преобразовал бы строку в массив, прошелся бы по нему и посчитал бы сколько раз каждый елемент встречается, на выходе бы имел ассоциативный массив где ключ это символ а значение -  количество повторений. с пхп понятно, там есть ассоциативные массивы а есть ли такое в асме ?


tasm, х86 под дос



PM MAIL   Вверх
Mikl_
Дата 11.1.2009, 08:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: 8
Всего: 14



Dave, для начала напиши программу, когда анализируется строка символов, после этого переделаешь ее на программу когда с клавиатуры вводится произвольная строка -- у тебя максимум 256 символов (на самом деле со 101 клавишной клавиатуры все символы ввести нельзя)
Код
.data
string db 'abra kadabra! sim salabim!',0; исходная строка не может быть длинее 256 символов 
;включаяя завершающий ноль так как в массиве счетчиков я отвел на каждый символ по 1 байту,
;то есть, если в строке одинаковые символы их не может быть больше 255
count db 256 dup (0); массив счетчиков
.code
                    mov di,0
                    mov bh,0
a0:              mov bl,string[di]; получаешь очередной символ
                    cmp bl,0; проверяешь не конец ли это строки
                    jz a1; если 0 -- выходим из цикла
                    inc byte ptr count[bx]; увеличиваешь на 1 значение соответствующего счетчика
                    inc di; переходим к следующему символу
                    jmp a0; 
a1:              ... 


Это сообщение отредактировал(а) Mikl_ - 15.1.2009, 04:41
PM MAIL   Вверх
airyashov
Дата 11.1.2009, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 1.7.2008

Репутация: 2
Всего: 6



символов меньше чем 256


--------------------
icq:3(один)7748666
mail:airyashov( а )inbox.ru
PM MAIL   Вверх
Mikl_
Дата 11.1.2009, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: 8
Всего: 14



airyashov, Символов, как видов в строке может быть 255 как минимум, так как NUL - завершает строку, поэтому больше одного раза его не посчитаешь -- управляющие символы я могу вводить на цифровой клавиатуре при нажатой клавише Alt или в комбинации с Ctrl+буква. Давайте определимся, что есть символ? Символ -- элементарный знак, какой-либо символики, рассматриваемый вне зависимости от выражаемого им смысла. В ASCII их как раз 256 smile 00-1Fh и 7Fh -- управляющие символы, 30h-39h -цифры, 20h-2Fh, 3Ah-40h, 5B-60h, 7B-7Eh -- символы операций и знаки препинания, 41h-5Ah, 61h-7Ah- латиница, 80h-FFh -- символы псевдографики и символы для иностран­ных алфавитов

Это сообщение отредактировал(а) Mikl_ - 15.1.2009, 04:48
PM MAIL   Вверх
Dave
Дата 14.1.2009, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 17.6.2004

Репутация: нет
Всего: 1



народ, спасибо за ответы !
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0507 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.