# 如何在C++中对同时包含负数和正数的字符串数组进行排序?

## arrays string (2)

• 检查两个字符串的第一个字符。 如果一个以数字开头，另一个以 `-` 开头，则以 `-` 开头的字符串是较小的数字。
• 如果两个字符串都以数字开头，则比较字符串的长度。 字符串越短，数字越小。 如果两个字符串长度相同，请执行标准字符串比较。
• 如果两个字符串都以 `-` 开头，则比较字符串的长度。 字符串越长，数字越小。 如果两个字符串的长度相同，请执行标准字符串比较，但取反结果。
``String str[]={"-123","89","-10","456"};``

`str` 是一个字符串数组，每个字符串都为整数格式，您必须在 `O(n log n)` 时间对该数组执行排序。

`str` 中的 `str` 可以表示正整数和负整数。 这些字符串的最大长度为1024个字符。

``````#include <algorithm>
#include <iostream>
#include <string>
#include <vector>

int main() {
std::vector<std::string> strings = {
"-1", "-1", "-20", "-4", "3", "0", "-0", "1", "20", "20", "44020",
};

// Assumes everything in "strings" has no whitespace in it.
// Assumes everything in "strings" does not have leading zeroes.
// Assumes everything in "strings" is an ascii representaion of an integer.
// Assumes everything in "strings" is nonempty.
std::sort(strings.begin(), strings.end(),
[](const std::string &a, const std::string &b) {
const bool a_is_negative = a[0] == '-';
const bool b_is_negative = b[0] == '-';
if (a_is_negative != b_is_negative) {
// If they have different signs, then whichever is negative is
// smaller.
return a_is_negative;
} else if (a.length() != b.length()) {
// If they have the same sign, then whichever has more
// characters is larger in magnitude. When the sign is negative,
// the longer (more digits) number is "more negative". When
// positive, the longer (more digits) number is "more positive".
return (a.length() < b.length()) != a_is_negative;
} else {
// Otherwise a lexicographic comparison of "a" and "b" will
// determine which string is larger in magnitude. Using the same
// logic above, we account for the "negative vs. positive"
// comparison.
return (a < b) != a_is_negative;
}
});

for (const auto &str : strings) {
std::cout << str << " ";
}
std::cout << std::endl;
}``````