-7
比方说,我有一个字符串(Java版本字符串)是这样的: “1.8.0_101” “1.8.0_91”如何比较C++中的java版本字符串?
有一种简单的方法来确定哪个版本的C/C++高?
我已经使用strcmp()到目前为止。它正确地比较版本字符串,如“1.7.0”和“1.8.0”,但是当涉及下划线字符时,它不再起作用(因为下划线在ASCII表中的值高于所有数字)
比方说,我有一个字符串(Java版本字符串)是这样的: “1.8.0_101” “1.8.0_91”如何比较C++中的java版本字符串?
有一种简单的方法来确定哪个版本的C/C++高?
我已经使用strcmp()到目前为止。它正确地比较版本字符串,如“1.7.0”和“1.8.0”,但是当涉及下划线字符时,它不再起作用(因为下划线在ASCII表中的值高于所有数字)
声明:应该只是一个例子,给你一个实现的想法。你的问题缺乏各种观点,以使它成为一个很好的问题,无论如何,我将尽力帮助并给你一个可运行的例子。代码可以改进,并使其更强大。
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
}
};
我希望你能找到你的问题的实施有用这个小例子。
你到目前为止尝试过什么?这是如何工作的? *如何*没有工作?你知道[如何提出好问题](http://stackoverflow.com/help/how-to-ask)这里在stackoverflow?以及如何创建[最小,完整和可验证示例](http://stackoverflow.com/help/mcve)? –
将数字推到两个向量上,比较向量。投票结束**太广泛**。 –
这实际上与Java没有任何关系;它只是一个C++字符串解析练习。请学会提取不相关的技术;它会帮助你进行研究,然后你甚至不需要问。 –