Я нашел очень запутанным при сортировке текстового файла. Разные алгоритмы / приложения дают разные результаты, например, при сравнении двух строк str1=";P"
и str2="-_-"
Просто для справки приведем ASCII для каждого символа в этой строке:
char(';') = 59; char('P') = 80;
char('-') = 45; char('_') = 95;
Итак, я пробовал разные методы, чтобы определить, какая строка больше, вот мой результат:
В Microsoft Office Excel Сортировка Команда:
"; P" <"-_-" </p>
C ++ std :: string :: compare (string & str2), т.е. str1.compare(str2)
"; P"> "-_-"
C # string.CompareTo (), т.е. str1.CompareTo(str2)
"; P" <"-_-" </p>
C # string.CompareOrdinal (), т.е. CompareOrdinal(w1, w2)
"; P"> "-_-"
Как показано, результат варьируется! На самом деле мой интуитивный результат должен быть равен методу 2 и 4, поскольку ASCII (';') = 59, что больше, чем ASCII ('-') = 45.
Так что я понятия не имею, почему Excel и C # string.CompareTo () дают противоположный ответ. Отмечено, что в C # вторая функция сравнения называется string.CompareOrdinal()
. Означает ли это, что функция C # string.CompareTo()
по умолчанию не является "Ordinal"?
Может ли кто-нибудь объяснить это несоответствие?
И кто-нибудь может объяснить в CultureInfo = {en-US}, почему он говорит: P> -_-? , что является основной мотивацией или принципом? И я когда-либо слышал о разном двойном умножении в разных культурах. Это скорее культурный шок ..!