2 / 2 / 3
Регистрация: 04.03.2017
Сообщений: 101
|
||||||
1 | ||||||
Поиск всех вхождений любого символа второй строки в первой (реализация strpbrk)28.10.2017, 17:04. Показов 4165. Ответов 14
Метки нет (Все метки)
Заданы две строки. Поиск всех вхождений любого символа второй строки в первой.
Реализовала так:
0
|
28.10.2017, 17:04 | |
Ответы с готовыми решениями:
14
Ввести две символьных строки. Выполнить поиск второй строки в первой и вывести номер позиции первой строки, с которой вторая строка содер-жится в ней Ввести две символьных строки. Выполнить поиск второй строки в первой и вывести номер позиции, с которой вторая строка содержится в первой. Заданы 2 строки, состоящие из слов, разделенных пробелами. Приписать три символа второй строки к первой Определить, совпадают ли первые два символа первой строки с двумя последними символами второй строки? |
Модератор
|
|
28.10.2017, 21:26 | 2 |
Поясните на каком-нибудь примере, что вы пытаетесь реализовать.
А также, зачем при публикации кода добавлять скрины этого же кода?
0
|
2 / 2 / 3
Регистрация: 04.03.2017
Сообщений: 101
|
|
29.10.2017, 07:37 [ТС] | 3 |
Пытаюсь в массив pos запомнить индексы встречающихся в строке 1 символов, которые есть в строке 2. Нашла команду mov byte ptr pos[bx],al ; но как для своей программы это переделать, не очень понимаю. Строка 1: 23489 Строка 2:123 pos: 01 . Про скрины учту, спасибо.
0
|
Модератор
|
||||||
29.10.2017, 08:11 | 4 | |||||
Вы объявили массив pos, как массив байт
А решение задачи действительно создание массива pos или что-то другое? Что должно выводится на экран в качестве результата? Добавлено через 17 минут Просто я пытаюсь сообразить, что служит ответом на задачу о поиске.
0
|
2 / 2 / 3
Регистрация: 04.03.2017
Сообщений: 101
|
|
29.10.2017, 08:33 [ТС] | 5 |
На экран должны выводиться индексы символов из строки 1, которые встречаются в строке 2. То есть при предыдущем примере 01 выведется
0
|
Модератор
|
||||||
29.10.2017, 08:54 | 6 | |||||
Т.е. в псевдокоде
Код
for (i=0; i<length(s1); i++) { if s1[i] присутствует в s2 printf("%d", i) } Покажу идею
Добавлено через 5 минут Я напутал с номерами строк, в которых проверяется вхождение - s1 и s2. Добавлено через 1 минуту Нет, не перепутал.
0
|
2 / 2 / 3
Регистрация: 04.03.2017
Сообщений: 101
|
||||||
30.10.2017, 18:00 [ТС] | 7 | |||||
Вот к чему пришла, только не получается загружать каждый символ из 2 строки и сравнивать его с символами в 1-ой
0
|
2 / 2 / 1
Регистрация: 30.10.2017
Сообщений: 8
|
||||||
30.10.2017, 19:54 | 8 | |||||
А зачем в программировании под Win32 такие странные манипуляции с сегментными регистрами?
Намек: Команда scasb принимает в edi адрес строки, в которой ищет байт, загруженный в регистр al. edi (указатель на строку) увеличивается/уменьшается автоматически.
1
|
Модератор
|
||||||
30.10.2017, 22:14 | 9 | |||||
ОвчинниВики, мне легче не в FASM, а в MASM32. Также, для ввода и вывода я использую WinAPI, а не mvcrt - при чтении строки ReadConsole в конец добавляются символы перевода строки, которые приходится удалять.
Но, думаю, что алгоритм будет виден. Алгоритм тот же, что и ранее приведён на псевдокоде. При использовании wsprintf портятся какие-то регистры, поэтому в цикле, когда значение регистров важно, вызов WinAPI обрамлён pushad/popad Действительно, в линейном режиме адресации нет нужды настраивать регистр es.
0
|
2 / 2 / 3
Регистрация: 04.03.2017
Сообщений: 101
|
||||||||||||||||
12.11.2017, 19:16 [ТС] | 10 | |||||||||||||||
Переделала код под FASM
0
|
Модератор
|
|
12.11.2017, 19:37 | 11 |
А какая структура программы:
1. На С ввод, вызов асм процедуры 2. Асм процедура - что-то ищет - что делать с результатом поиска?
0
|
Эксперт Hardware
|
||||||
13.11.2017, 08:23 | 12 | |||||
Я бы сделал так..
Дескрипторы клавы и монитора всегда постоянны: 3 и 7 соответственно. Чтобы не вычислять длину ввода, можно сразу использовать API, которые возвращают эту длину... например тот-же ReadConsole или по-проще _LREAD\WRITE (R\W из файла), где вместо дескриптора файла просто подставить клаву. Когда заканчиваешь ввод по ENTER, fn. LREAD вставляет в буфер(0Dh,0Ah) и чтобы SCASB не пропустил последний символ в строке, нужно убрать только(0Ah). Пример подобной реализации поиска первого символа подстроки в строке на FASM'e, может выглядеть так:
0
|
Модератор
|
|
13.11.2017, 08:35 | 13 |
R71MT, у ТС всё интереснее - теперь это не программа на asm, а программа на C со вставками на асме или с раздельной компиляцией (один файл C, другой файл asm и нужно их вместе собрать в одну программу).
Поэтому встаёт вопрос о взаимодействии между частями одной программы. На мой взгляд, процедура, находящая индексы в строке не должна их самостоятельно выводить, а лишь передавать вышестоящей программе, которая и будет распоряжаться этими данными. Добавлено через 25 секунд Хотя в учебных целях можно и выводить сразу.
0
|
2 / 2 / 3
Регистрация: 04.03.2017
Сообщений: 101
|
|||||||||||||||||||||
17.11.2017, 16:47 [ТС] | 14 | ||||||||||||||||||||
Принцип в том, что нужно создать библиотеку на asm. Будет cpp, в котором будет вызываться функция
Добавлено через 19 минут Это реализация функции STRPBRK, которая находит и выводит позицию первого вхождения любого символа второй строки в первой, я пытаюсь несколько изменить. Добавлено через 1 час 14 минут Вроде переделала, но что-то странное выдает
0
|
Модератор
|
|||||||||||
19.11.2017, 22:07 | 15 | ||||||||||
У вас что-то непродуманно с алгоритмом.
Опишите словами, что должна делать функция. Как я понимаю, что на вход подаются две строки. На выходе - первая позиция (от 0) в строке 1 символа, который имеется в строке 2. Т.е. строка 2 это список интересующих символов. И мы проверяем наличие в строке 1 этих символов. Тогда сам алгоритм процедуры должен быть иным. У меня нет Visual Studio, поэтому сделаю в masm32. А дальше вы самостоятельно. Добавлено через 1 час 11 минут
Только учтите - Pos это не номер позиции (индекс), а указатель. Чтобы распечатать символ из строки 1 нужно разыменовывать указатель. Что-то вроде
0
|
19.11.2017, 22:07 | |
19.11.2017, 22:07 | |
Помогаю со студенческими работами здесь
15
Определить местоположение символа первой строки, который первым совпал с одним из символов второй строки. Строки. Определить местоположение символа первой строки, который первым совпал с одним из символов второй Заданы 2 строки, состоящие из слов, разделенных пробелами. Приписать три символа второй строки к первой Определить местоположение символа первой строки, который первым не совпал с одним из символов второй строки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |