2013-05-08 2 views
2

Я хочу сравнить две строки "численно". Я имею в виду, как 2C составляет менее 11A. Я попробовал это, и это не работает:Сравнение строки "с численным первым"

if("2A" < "11A"){ 
    echo "First corect"; 
} 

if(strcmp("2A", "11A") < 0){ 
    echo "Last corect"; 
} 

echo "Tests completed"; 
+0

Вы должны сначала разделить токены строк, используя регулярные выражения. Затем вы можете сначала сортировать маркеры и затем рекомбинировать результат. – arkascha

+1

Что вы имеете в виду «численно»? – F0G

+0

- это 2А и 11А шестнадцатеричные числа? – Kasyx

ответ

7

Вы ищете strnatcmp (или его прецедентной нечувствительный брат, strnatcasecmp).

Это будет сравнивать числовые части вашего ввода как числа (размещение «2whatever» перед «11whatever») и текстовые части в виде текста (размещение «2a» перед «2b»).

+0

+1 beat me к нему –

0
if(intval(0x2A) < intval(0x11A)){ 
    echo "First corect"; 
} 
else 
{ 
    echo "Tests incompleted"; 
} 

попробуйте этот код

0

Написать функцию, которая:

  1. размечает каждую строку в список <Object>, где каждый объект может быть Строки или Integer с Целыми создаваемой из непрерывной строки цифр между не-цифрами, причем строки являются смежными без цифр между любыми двумя цифрами.
  2. В цикле сравнить два элемента списка по элементу. Если тип объектов не совпадает (т. Е. Сравнение целых чисел с строкой), вы принимаете меньшее/большее решение, по которому вы хотите сортировать меньше, буквы или цифры. Если они соответствуют только менее, равно, больше, чем сравнение.
  3. Если два Nth elements в списке равны, сравните N+1th elements, в противном случае return t/f на основе целых чисел или целых чисел или строк.
Смежные вопросы