假设我有这样的字符串(Java版本字符串): “1.8.0_101” “1.8.0_91”
有没有一种简单的方法可以确定c / c ++中哪个版本更高?
到目前为止我使用过strcmp()。它正确地比较了“1.7.0”和“1.8.0”等版本字符串,但是当涉及下划线字符时它不再起作用(因为下划线在ASCII表中的值比所有数字都高)
答案 0 :(得分:1)
免责声明:这应该只是一个让您了解实施的示例。你的问题缺乏不同的观点,以使它成为一个好问题,无论如何我会尝试帮助并给你一个可运行的例子。代码可以改进并使其更健壮。
struct Version {
int m_major;
int m_minor;
int m_release;
int m_minor_release;
Version() : m_major(-1),
m_minor(-1),
m_release(-1),
m_minor_release(-1) { }
// Convert a str to a version object
explicit Version(const std::string& str_version) : Version() {
size_t offset = 0;
size_t finder;
// Cycle until find a character as '.' '-' '_'
while (finder = str_version.find_first_of(".-_", offset),
finder != std::string::npos) {
int* p = nullptr;
if (m_major == -1) {
p = &m_major;
} else if (m_minor == -1) {
p = &m_minor;
} else if (m_release == -1) {
p = &m_release;
} else {
p = &m_minor_release;
}
*p = std::stoi(str_version.substr(offset, finder - offset));
offset = finder + 1;
}
if (offset != str_version.size() && m_minor_release == -1) {
m_minor_release = std::stoi(
str_version.substr(offset,std::string::npos));
}
}
bool operator<(const Version& oth) const {
// compare this version with another one
}
};
我希望您能找到对您的问题实施有用的小例子。