Сравнение строк в сборке MIPS - PullRequest
0 голосов
/ 12 октября 2011

У меня есть несколько строк в массиве, которые я определил в сегменте данных.Если бы я взял две строки из массива, можно ли сравнить их, чтобы увидеть, какая из них имеет большее значение в мипах?Как бы я это сделал?В основном, я ищу перестановку строк в алфавитном порядке.

РЕДАКТИРОВАТЬ: Это не столько моя попытка получить помощь по конкретной проблеме, сколько просто общий вопрос, который поможет мне с моим подходом к коду.Спасибо!

1 Ответ

1 голос
/ 12 октября 2011

Если бы это был я, я бы создал список указателей на строки. То есть список адресов каждой строки. Затем вы напишите подпрограмму, сравнивающую две строки с учетом их указателей. Затем, когда вам нужно поменять местами строки, вы просто поменяете местами указатели.

Вы хотите не менять местами сами строки, так как они могут быть плотно упакованы, поэтому вам придется много сдвигать, чтобы переместить дыры в памяти. Указатели просто поменять местами. Вы могли бы поменять строки проще, если бы они были фиксированной длины (или меньше), тогда вам не пришлось бы беспокоиться о перемещении дыр в памяти.

Но сортировка списка указателей - действительно горячая подсказка.

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

...